2

おそらくさらに初心者の質問で、ここでHaskellへの完全な初心者。ghci出力を機能させようとしていますが、インスタンス宣言でスタックしています。与えられた「(Show(Stack-> Stack))」のインスタンスをどのように宣言できますか?

data Cmd = LD Int
         | ADD
         | MULT
         | DUP
         deriving Show

type Prog = [Cmd]

type Stack = [Int]

type D = Stack -> Stack

私は次のような宣言を作成しようとしています:

instance Show D where show = Stack

しかし、私のすべての試みは、違法なインスタンス宣言をもたらしました。どんな助けや参考文献も大歓迎です!

4

1 に答える 1

7

まず、デフォルトでは、型の同義語(つまり、を使用して定義されたものtype)は、インスタンス宣言では有効ではありません。ただし、これを可能にするGHC拡張機能があります。

それを超えて、この特定のケースでは、 ;showを返す必要があります。Stringインスタンスが...タイプの同義語名を返そうとしていますが、これは最初から意味がなく、さらに、のリストを参照しています。Intこれは、の間違った戻りタイプですshow

最後にD、関数型は何showですか?とにかく、それは何を想定していますか?Showほとんどの場合、関数型のインスタンスで意味のあることを実行できることはほとんどありません。

「これはタイプDです」とだけ言いたい場合は、次のようなインスタンスを作成できます。

{-# LANGUAGE TypeSynonymInstances #-}
instance Show D where show _ = "Stack -> Stack"

しかし、それが実際にどれほど役立つかはわかりません。

于 2010-04-21T21:46:50.153 に答える