我有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
答案 0 :(得分:8)
readFile
是一个函数FilePath -> IO String
,而getContents
只是IO String
,因此您无法使用(.)
运算符将其与liftM lines
组合在一起。你应该使用
getLinesIn = liftM lines getContents
或
getLinesIn = fmap lines getContents