setPosition如何工作?

时间:2012-07-17 19:56:18

标签: haskell parsec

我不确定如何使用setPosition(Parsec库)。这是一段非常简单的代码,它应该读取文本第二行的前3个字符。

import Text.ParserCombinators.Parsec

content = ["This is the first line",
           "and this is the second one",
           "not to talk about the third one"]

txt = unlines content

main = parseTest myPar txt

myPar = getPosition >>= \oldPos ->
        let newPos = setSourceLine oldPos 2 in
        setPosition newPos >>
        count 3 anyChar

尽管如此,输出是“Thi”而不是“and”,正如我所想的那样......我觉得我错过了一些非常简单,但唉,我不知道是什么;你能救我吗?

1 个答案:

答案 0 :(得分:4)

setPosition函数更改Parsec报告错误的位置,但不影响解析实际上的标记流中的位置。它被用作需要做奇特事情的后端的原语:必须在其他文件中报告位置的预处理器,在非Char标记流上运行的解析器,等等。