哈斯克尔无法匹配&t't0 - > t'实际类型' [整数]'

时间:2017-12-29 03:44:11

标签: haskell

我正在学习Haskell,在掌握了一些基础知识后,我决定解决HackerRank中的一些简单问题。但我很快发现自己陷入困境。

功能问题中的问题7被称为" N个元素的数组"

我们应该为给定的n返回n个元素的任何数组。如果n是Int,那么这将非常简单,但它被读作IO Int。我还没有真正理解monad的概念。我为类型签名为IO Int -> Int的函数提供了问题,并找到了unsafePerform IO,但它抛出了这个:

Couldn't match expected type ‘t0 -> t’
              with actual type ‘[Integer]’

我不太了解t0和t的类型。

感谢任何帮助。

链接:https://www.hackerrank.com/challenges/fp-array-of-n-elements/problem

1 个答案:

答案 0 :(得分:4)

该网站上的fn输入 Int。你从根本上误解了这里使用的记号。

main = do
 n <- readLn :: IO Int
 print (fn(n))

第二行并未说n的类型为IO Int。它说readLn的类型为IO Int,然后 IO monad中的绑定到n。因此n的类型为Int。将您的函数写为fn :: Int -> [Int],您就可以了。在这次挑战中无需担心IO

你可以阅读更多关于do-notation here的内容,但除非你经历过涵盖monad的Haskell教程,否则它可能没有多大意义。