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