我是Haskell的新手。主题来自Learn your Haskell书籍“递归数据结构”
这是我的代码
data List a = Empty | Cons a (List a) deriving (Show, Read, Eq, Ord)
main = do
print $ Empty
print $ 5 `Cons` Empty
print $ 4 (Cons 5 Empty)
print $ 3 `Cons` (4 `Cons` (5 `Cons` Empty))
这是我收到的错误消息
No instance for (Show a0) arising from a use of `print'
The type variable `a0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)
Note: there are several potential instances:
instance Show a => Show (List a)
答案 0 :(得分:10)
Empty
可以是任何类型的List
,尽管恰好是show Empty
在"Empty"
工作的所有情况下都是show
的情况根本没有,编译器真的不知道。 (对于实际情况可能因类型而异的实际示例,请在ghci中比较show ([] :: [Int])
和show ([] :: [Char])
。)因此,它要求您选择一种类型来帮助它决定如何运行{{1 }}。非常容易解决:
show Empty
不要忘记将main = do
print $ (Empty :: List Int)
...
添加到Cons
行!