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