小编Cat*_*tos的帖子

声明Eq(树a)的实例,如果它们具有相同的元素,则两个树相等

我正在尝试在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)

扁平的签名没有做到.

tree haskell types

3
推荐指数
1
解决办法
89
查看次数

标签 统计

haskell ×1

tree ×1

types ×1