haskell state parsec

haskell - Estado de usuario en Parsec



state (2)

Desafortunadamente, la sugerencia de Yuras de updateParserState no es óptima (usaría esa función si también está buscando modificar el estado interno de Parsec); en su lugar, debe pasar una función que funcione sobre su estado de usuario personalizado (es decir, de tipo u -> u ) a modifyState , como en este ejemplo:

expr = do x <- identifier modifyState (+1) -- ^ in this example, our type u is Int return (Id x)

o use cualquier combinación de las funciones getState y putState . Para tu caso, harías algo como:

modifyState (Set.insert v)

Vea este enlace para más información.

Para una introducción más similar a un tutorial sobre cómo trabajar con el estado de usuario en Parsec, este documento , aunque antiguo, debe ser relevante.

Estoy analizando una expresión usando Parsec y quiero hacer un seguimiento de las variables en estas expresiones usando el estado del usuario en Parsec. Desafortunadamente, realmente no entiendo cómo hacerlo.

Dado el siguiente código:

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 -> ...

Entonces, la u en la ParsecT suma sería Set.Set . Pero, ¿cómo integraría la actualización de estado en var ?

Intenté algo como modify $ Set.insert v , pero esto no funciona, ya que Set.Set no es una mónada estatal.