В моей очень простой игрушечной программе с логическими выражениями у меня есть следующая функция оценки:
eval' :: Expr -> M.Map Char Bool -> Bool
eval' (Const c) values = c
eval' (Var v) values = M.findWithDefault False v values
eval' (Not x) values = not (eval' x values)
eval' (And a b) values = eval' a values && eval' b values
eval' (Or a b) values = eval' a values || eval' b values
eval' (Xor a b) values = eval' a values /= eval' b values
Мне было интересно, есть ли способ передать значения
таблица неявно? Может быть, с помощью Монад?