Состояние пользователя в Parsec

Я анализирую выражение с помощью 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 в сумме ParsecT будет Set.Set . Но как мне интегрировать обновление состояния в var ?

Я пробовал что-то вроде изменить $ Set.insert v , но это не работает, так как Set. Набор не является монадой состояния.

16
задан bzn 25 June 2011 в 11:50
поделиться