在Haskell中打印空列表

时间:2016-07-18 00:41:54

标签: haskell

这是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无效。我想我只是不知道错误是什么意思..请帮助我。 感谢。

1 个答案:

答案 0 :(得分:3)

Haskell中的列表在其元素类型中是多态的,并且[]包含的信息不足以通过明确给出类型注释[] :: [Int]来提供ghc。

您获得的错误是由于列表的Show实例依赖于其元素的Show实例,并且ghc无法确定它假定ist没有这样的实例实例

现在您可能认为所有内容都可以转换为String,但您可以考虑Int -> Int并尝试

show [(+1)]

这不适用于Haskell中的函数没有默认的Show实例。