私が持っている場合:
data Container a = Node a | End a | Container a
Container a 要素のリストを見て、リスト差分を実行できる関数を書きたい場合、この抽象データ型が同等であることをコンパイラに明示的に伝えるにはどうすればよいでしょうか?
私はそれが次のようになると思いました:
compare::Eq (Container a) => Container a -> Container a -> Bool
compare a b
| a == b = True
| a /= b = False
しかし、「==」の使用に起因する (Eq (Container a)) を推測できなかったため、Eq ステートメントが正しくないと不平を言っています。
編集私の抽象データ型で (Eq) を導出することが、これを許可する唯一の方法です。誰か確認してくれませんか?
派生を含めた後のEDIT2(Eq):
test:: [Container a] -> Container a -> Bool
test list element = elem element list
「(Eq a) のインスタンスなし」