我试图围绕Haskell中的类和数据结构,特别是声明它的类型实例。我可以使它与某些类和数据类型一起使用,但不能与所有类和数据类型一起使用,因此我必须缺少一些东西。具体来说,我有以下数据声明:
data LinkedList a = End | Link a (LinkedList a)
我想声明该类型的Show实例,以便输出看起来类似于“ el1,el2,el3,el4,...”
instance Show LinkedList where
show (End) = "."
show (Link a b) = show a ++ "," ++ show b
按预期,这行不通...知道为什么吗?我想我理解“数据”和“类型”的含义,但是我不确定我是否对类和实例感到满意。谢谢
答案 0 :(得分:2)
instance Show LinkedList where
LinkedList
不是类型,LinkedList a
是类型。纠正这一点,我们得到
instance Show (LinkedList a) where
然后,出现另一个错误,因为我们对类型为show
的值调用a
。我们还需要a
也属于类Show
。
instance Show a => Show (LinkedList a) where
现在应该可以了。