【发布时间】:2013-09-10 04:58:16
【问题描述】:
我对 Haskell 还是很陌生,我正在尝试简单地将文件读入字符串列表。我希望列表中的每个元素都有一行文件。但是我遇到了一个我不明白的类型问题。以下是我为我的函数编写的内容:
readAllTheLines hdl = (hGetLine hdl):(readAllTheLines hdl)
编译得很好。我曾认为文件句柄需要与从openFile 返回的相同。我试图通过执行以下操作来简单地显示上述函数的列表:
displayFile path = show (readAllTheLines (openFile path ReadMode))
但是当我尝试编译它时,我得到以下错误:
filefun.hs:5:43: 无法将预期类型“句柄”与实际类型“IO 句柄”匹配 在“openFile”调用的返回类型中 在“readAllTheLines”的第一个参数中,即 '(打开文件路径 ReadMode)' 在'show'的第一个参数中,即 '(readAllTheLines (openFile path ReadMode))'
所以看起来 openFile 返回一个IO Handle,但hGetLine 需要一个普通的旧Handle。我是否误解了这两个功能的使用?它们不打算一起使用吗?还是只是我缺少一块?
【问题讨论】:
-
您是否已经看过像Learn you a Haskell 这样的优秀Haskell 教程?它关于Input and Output 的章节将更容易理解一些值和
IO中的值之间的区别。 -
今晚我刚刚找到了那个特别的教程。我一直在阅读 Haskell wikibook,但我发现它在后面的章节中变得令人困惑。谢谢指点!
标签: haskell