【发布时间】:2014-04-06 11:08:10
【问题描述】:
我正在尝试对一大堆小文件运行 Parsec 解析器,并收到错误消息,提示我打开的文件太多。我知道我需要使用严格的 IO,但我不知道该怎么做。这是有问题的代码:
files = getDirectoryContents historyFolder
hands :: IO [Either ParseError [Hand]]
hands = join $ sequence <$> parseFromFile (many hand) <<$>> files
注意:我的<<$>> 函数是这样的:
(<<$>>) :: (Functor f1, Functor f2) => (a -> b) -> f1 (f2 a) -> f1 (f2 b)
a <<$>> b = (a <$>) <$> b
【问题讨论】:
-
问题是
parseFromFile太懒了,这是我建议改变的一点,因为你必须包含它。此外,使用pipes或conduit包可能是个好主意
标签: haskell lazy-evaluation parsec lazy-io