我想把整个文件读入一个字符串,然后使用函数
但是我编译失败了,出现了以下错误:
lines
来获取该字符串的行。我正在尝试使用以下代码行实现:main = do
args <- getArgs
content <- readFile (args !! 0)
linesOfFiles <- lines content
但是我编译失败了,出现了以下错误:
Couldn't match expected type `IO t0' with actual type `[String]'
In the return type of a call of `lines'
In a stmt of a 'do' block: linesOfFiles <- lines content
我以为将readFile
的结果绑定到content
变量上后,它会变成一个String
数据类型,为什么不是呢?
content
传递给lines
,因为lines
的类型是String -> [String]
,而content
的类型是IO String
。 - kjhcontent
是一个String
类型。readFile (args !! 0)
的类型是IO String
,我们将content
绑定到那个IO
动作的“结果”上。do { a <- action; stuff; }
结构会被转换成action >>= \a -> stuff
,如果action
的类型是IO t
,那么a
的类型就是t
。 - Daniel Fischer