【发布时间】:2011-06-15 16:22:32
【问题描述】:
我想,只是为了了解一些关于 Iteratees 的知识,使用 Data.Iteratee 和 Data.Attoparsec.Iteratee 重新实现我制作的一个简单的解析器。不过,我很难过。下面我有一个简单的例子,它能够从文件中解析 one 行。我的解析器一次读取一行,所以我需要一种向迭代器提供行的方法,直到它完成。我已经阅读了我在谷歌上搜索到的所有内容,但是很多关于 iteratee/enumerators 的材料都非常先进。这是重要的代码部分:
-- There are more imports above.
import Data.Attoparsec.Iteratee
import Data.Iteratee (joinI, run)
import Data.Iteratee.IO (defaultBufSize, enumFile)
line :: Parser ByteString -- left the implementation out (it doesn't check for
new line)
iter = parserToIteratee line
main = do
p <- liftM head getArgs
i <- enumFile defaultBufSize p $ iter
i' <- run i
print i'
此示例将解析并打印多行文件中的一行。原始脚本将解析器映射到 ByteStrings 列表。所以我想在这里做同样的事情。我在 Iteratee 中找到了enumLines,但我终生无法弄清楚如何使用它。也许我误解了它的目的?
【问题讨论】:
标签: haskell iterate attoparsec