以下はHaskellの多型データ型で、Hugsによって解釈されます。 Show for Equalityのインスタンスを作成しようとしています。Haskell(Hugs)のこのShowインスタンスがスタックオーバーフローエラーを引き起こすのはなぜですか?
インスタンス宣言では、「a」タイプが「表示」にある場合、「等価」aが「表示」に表示されます。コンストラクタの2つの引数をaとbをa = bの形式で出力する必要があります。
data Equality a = Equals a a
instance (Show a) => Show (Equality a) where
show (Equals a b) = a ++ " = " ++ b
しかし、 "(平等9 9)" のような抱擁に何かを入力利回り:
ERROR - Cのスタックオーバーフロー
だから、私は「ショーを(A-Bに等しい)インデントみました。.. 。 "行に2つのスペースがあります。私は違いがどうなるかわからないんだけど、ただ遊んでた後、これを得た:これらのエラーが発生し、またはこのショーのインスタンスを実装するより良い方法を提案している理由
Inferred type is not general enough
*** Expression : show
*** Expected type : Show (Equality a) => Equality a -> String
*** Inferred type : Show (Equality [Char]) => Equality [Char] -> String
誰も説明できますか?
ありがとうございました!
は、これは一般的に悪い考えです: 'Show'は、有効なHaskellコード(モジュロインポートの詳細を生成、Haskellのための基本的な直列化機構を提供するためのものです)。カスタム出力フォーマットを行いたい場合は、複雑な出力用にきれいな印刷ライブラリを使用して、カスタムの 'prettyPrint :: a - > String'関数などを生成することができます。 – ivanm