Haskell对函数调用感到沮丧

时间:2011-09-19 19:32:09

标签: list haskell types monads

学习Haskell正在杀了我。如果我要编写一个带有可订单元素数组的函数,并输出相同的内容,我该怎么做?

我试试:

main = testfn [[1],[2]]

testfn :: (Ord a) => [[a]] -> [[a]]
testfn x = x

但我得到的信息是:

  

无法将预期类型'IO t0'与实际类型'[[a0]]'匹配   expression:main检查函数'main'的类型时

2 个答案:

答案 0 :(得分:7)

您的问题是,main必须是IO a形式的类型(您可以在错误中看到这一点 - GHC希望主推断类型[[a0]]与{匹配} {1}})。此处IO t0的类型为main。您只需打印结果即可轻松解决此问题:

[[Int]]

答案 1 :(得分:3)

函数main必须包含IO a类型。您将main定义为testfn [..],其类型为Ord a, Num a => [[a]]

您希望该计划做什么?与您订购的已知解决方案相比较?

main = print (knownSolution == testfn [[1],[2]])

或者打印结果?

main = print $ testfn [[1],[2]]