Haskell读取文件行

时间:2012-06-13 19:40:20

标签: file haskell io

我想将整个文件读入一个字符串,然后使用函数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的结果绑定到内容,它将是String数据类型,为什么不呢?

1 个答案:

答案 0 :(得分:33)

  

我认为通过将readFile的结果绑定到内容它将是一个String DataType,为什么不是呢?

确实是String,这不是编译器所抱怨的。我们来看看代码:

main = do
   args <- getArgs
   content <- readFile (args !! 0)

现在content根据需要是String。然后lines content[String]。但是你在下一行使用monadic绑定

   linesOfFiles <- lines content

IO ()块中。因此,编译器需要IO something右侧的<-类型的表达式,但它会找到[String]

由于计算lines content不涉及任何IO,因此您应将其结果与let绑定绑定,而不是使用monadic绑定,

   let linesOfFiles = lines content

是你需要的那条线。