这是haskell代码。我在下面找到了我错的原因。
main = do
print [1] -- Okay
print [] -- error
错误字符串正在跟随。
P07.hs:38:11:错误: ?使用'print'产生的模糊类型变量't0' 防止约束'(显示t0)'被解决。 可能的修复:使用类型注释来指定't0'应该是什么。 这些潜在的实例存在: 实例显示排序 - 在'GHC.Show'中定义 实例显示整数 - 在'GHC.Show'中定义 实例显示a =>显示(可能是a) - 在'GHC.Show'中定义 ......还有22个人 ......加上涉及范围外类型的五个实例 (使用-fprint-potential-instances查看全部) ?在“做”的过程中。块:打印[] 在表达式中:do {print []} 在'main'的等式中:main = do {print []}
我试过[] :: Show
无效。我想我只是不知道错误是什么意思..请帮助我。
感谢。
答案 0 :(得分:3)
Haskell中的列表在其元素类型中是多态的,并且[]
包含的信息不足以通过明确给出类型注释[] :: [Int]
来提供ghc。
您获得的错误是由于列表的Show
实例依赖于其元素的Show
实例,并且ghc无法确定它假定ist没有这样的实例实例
现在您可能认为所有内容都可以转换为String
,但您可以考虑Int -> Int
并尝试
show [(+1)]
这不适用于Haskell中的函数没有默认的Show
实例。