我可以在Haskell代码中使用类型声明吗?

时间:2014-08-25 13:31:31

标签: haskell

我是Haskell的新手,我对函数类型声明有一点疑问。假设有一堆整数,我们需要将它相加并打印出来。我知道这有效:

main = do a <- fmap (map read . words) getContents :: IO [Int] print $ sum a

a <- fmap (map (read :: Int) . words) getContents失败。为什么失败了?我们知道getContentsIO String,然后words正在处理String并将[String]返回map (read :: Int),我认为可能会很好,因为我们宣布它为Int,但它失败了。

在代码行中使用类型声明是不可能的,或者我以错误的方式使用它。感谢。

1 个答案:

答案 0 :(得分:4)

问题是read没有类型Int,它的类型为String -> Int(为了您的目的)。 map函数仅接受函数作为其第一个参数,并且您试图说read具有类型Int,这意味着它不是函数。您也无法将类型Read a => String -> a强制转换为Int,因此在这两个问题上都会出错。