gpt4 book ai didi

haskell - 在 Haskell 中使用 `print' 没有产生 (Show a0) 的实例

转载 作者:行者123 更新时间:2023-12-02 17:21:16 25 4
gpt4 key购买 nike

我是 Haskell 新手。题目来自Learn you 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)

最佳答案

Empty 可以是任何类型的 List,尽管碰巧 show Empty 会是 "Empty “ 在所有 show 起作用的情况下,编译器并不真正知道这一点。 (对于实际情况因类型而异的示例,请比较 show ([]::[Int])show ([]::[Char])在 ghci 中。)因此它要求您选择一种类型来帮助它决定如何运行 show Empty。非常简单的修复:

main = do
print $ (Empty :: List Int)
...

别忘了在 4 (Cons 5 Empty) 行中添加 Cons!

关于haskell - 在 Haskell 中使用 `print' 没有产生 (Show a0) 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42258088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com