Haskell:为什么我不能使用liftM线。 getContents

时间:2016-04-06 12:08:22

标签: haskell

我有getLinesIn = liftM lines . getContents而不是

readAndWriteIn = do
  list <- getLinesIn

它不起作用。 它说:无法匹配预期的类型a0 - &gt; m0实际类型为IO String的字符串。 我不明白为什么会这样? 当我使用getLinesFile = liftM lines . readFile时 它工作正常。 我需要对getContents做同样的事情。有办法吗?

感谢任何想法。

编辑: 完整输出:

Couldn't match expected type `a0 -> m0 String'
            with actual type `IO String'
In the second argument of `(.)', namely `getContents'
In the expression: liftM lines . getContents
In an equation for `getLinesIn':
    getLinesIn = liftM lines . getContents

1 个答案:

答案 0 :(得分:8)

readFile是一个函数FilePath -> IO String,而getContents只是IO String,因此您无法使用(.)运算符将其与liftM lines组合在一起。你应该使用

getLinesIn = liftM lines getContents

getLinesIn = fmap lines getContents