web-dev-qa-db-ja.com

Haskell:カスタムタイプの派生ショー

私はこのタイプの定義を持っています:

data Operace = Op (Int->Int->Int) String (Int->Int->Int) deriving Show

このタイプをインタラクティブシェル(GHCi)に出力したい。印刷する必要があるのは、Stringフィールドだけです。

私はこれを試しました:

instance Show Operace where
    show (Op op str inv) = show str

しかし、私はまだ得続けています

No instance for (Show (Int -> Int -> Int))
  arising from the 'deriving' clause of a data type declaration
Possible fix:
  add an instance declaration for (Show (Int -> Int -> Int))
  or use a standalone 'deriving instance' declaration,
       so you can specify the instance context yourself
When deriving the instance for (Show Operace)

(Int->Int->Int)Showを追加したくないので、出力したいのは文字列だけです。

手伝ってくれてありがとう!

編集:

将来の参考のために、修正バージョンは次のとおりです。

data Operace = Op (Int->Int->Int) String (Int->Int->Int)

instance Show Operace where
    show (Op _ str _) = str
30
Matěj Zábský

作成したインスタンス宣言は正しい方法です。元のderiving宣言から誤ったdata句を削除するのを忘れたようです。

data Operace = Op (Int->Int->Int) String (Int->Int->Int)

instance Show Operace where
   show (Op op str inv) = show str
23
hugomg

Showを派生させることができます。インポートするだけText.Show.Functions 最初。

23