Haskell声明Show类的实例

时间:2018-09-08 16:47:48

标签: class haskell instance show

我试图围绕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

按预期,这行不通...知道为什么吗?我想我理解“数据”和“类型”的含义,但是我不确定我是否对类和实例感到满意。谢谢

1 个答案:

答案 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

现在应该可以了。