我正在尝试在Haskell中为我的树数据类型创建一个Eq(树a)的实例,这样如果它们具有相同的元素,则两个树是相等的.所以我有一个方法将我的树变成一个列表(展平),然后我比较排序列表.但是我得到的错误就像我排序列表时没有(Ord a)的实例,或者当我= =我的两个列表时(Eq a).
import Data.List as L
data Tree a = EmptyTree | Node (Tree a) a (Tree a)
instance Eq (Tree a) where
(==) t1 t2 = L.sort(flatten t1) == L.sort(flatten t2)
flatten :: Tree a -> [a]
flatten EmptyTree = []
faltten (Node x1 y x2) = [y] ++ (flatten x1) ++ (flatten x2)
Run Code Online (Sandbox Code Playgroud)
我不知道为什么拒绝编译.我使用了一种方法,从列表中生成一个树并展平该树返回原始列表,所以我知道flatten工作正常.我假设它抱怨不知道列表的内容是Ord还是Eq,但我不知道如何解决这个问题.添加
(Ord a, Eq a) =>
Run Code Online (Sandbox Code Playgroud)
扁平的签名没有做到.