我正在使用 Parsec 解析表达式,并且我想使用 Parsec 中的用户状态来跟踪这些表达式中的变量。不幸的是,我真的不知道该怎么做。
给定以下代码:
import Data.Set as Set
inp = "$x = $y + $z"
data Var = V String
var = do char '$'
n <- many1 letter
let v = Var n
-- I want to modify the set of variables here
return v
parseAssignment = ... -- parses the above assignment
run = case runIdentity $ runParserT parseAssignment Set.empty "" inp of
Left err -> ...
Right -> ...
因此,u
inParsecT s u m a
将是Set.Set
. 但是我将如何将状态更新集成到 中var
?
我尝试了类似的东西modify $ Set.insert v
,但这不起作用,因为Set.Set
它不是状态单子。