2017-12-28 11 views
1

リストがどのようにShowクラスのインスタンスであるかをチェックする方法はありますか。私はこのようなデータ型があります。表示のインスタンスとしてリスト

data Graph a = Graph [a]をし、私はshow関数を呼び出すことができるとき が、私はそれを持つ唯一のリストとない単語グラフを得るように、それをShowのインスタンスを作りたいです。

私はこれを試しましたが、showが文字列を返し、xがリストであるため、これが機能しないことがわかりました。私はから学んでいます。あなたは良いことをhaskell学ぶ。例はなく、インターネット上でも見つけることはできません。

instance Show (Graph a) where 
    show (Graph x) = x 

どうすればこの結果が得られますか?

+1

'データのグラフA =グラフ[A]' 'ではなくnewtypeのグラフA =グラフ[A]'より: – dfeuer

+0

@dfeuer次のセクションですが、私はそのセクションを読んでいません。 –

答えて

5
instance Show a => Show (Graph a) where 
    show (Graph x) = show x 

我々は含まれているリストを表示する必要があるので、我々はxを返すことはできませんが、我々はshow xを返さなければなりません。これには、[a]というタイプのリストxが表示される必要があるので、Show a => ...コンテキストを使用する必要があります。あなたが使用している理由がある

show (Graph x) = show x 
+2

これは再帰関数のように見えますが、そうではありません。あなたが呼ぶ 'show'はあなたが宣言した' show'とまったく異なります。 –

+1

(ただし、 'show'の代わりに' showsPrec'を実装してください) –

3

は、単にリストを表示しますか?単一コンストラクタ、単一フィールド型の通常のデフォルトは `newtype`です。特別な目的のために怠惰を余分に必要とするときにのみ、それらのために `data`を使います。
関連する問題