【发布时间】:2010-08-27 16:05:44
【问题描述】:
有人建议我使用 attoparsec 来解析文件,现在我必须了解如何使用它; 有人给了我这段代码:
#
type Environment = M.Map String String
import Data.Attoparsec (maybeResult)
import qualified Data.Attoparsec.Char8 as A
import qualified Data.ByteString.Char8 as B
environment :: A.Parser Environment
environment = M.fromList <$> A.sepBy entry A.endOfLine
parseEnvironment = maybeResult .flip A.feed B.empty . A.parse environment
spaces = A.many $ A.char ' '
entry = (,) <$> upTo ':' <*> upTo ';'
upTo delimiter = B.unpack <$> A.takeWhile (A.notInClass $ delimiter : " ")
<* (spaces >> A.char delimiter >> spaces)
效果很好,但我不知道为什么: 使用翻转的原因是什么,将A.feed的参数放在不同的顺序中不是更容易吗?为什么有B.empty? 有没有我可以学习的教程? 提前致谢
【问题讨论】:
-
可能作者用了
pointfree。
标签: parsing haskell attoparsec