избегайте явной передачи таблицы поиска

В моей очень простой игрушечной программе с логическими выражениями у меня есть следующая функция оценки:

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

Мне было интересно, есть ли способ передать значения таблица неявно? Может быть, с помощью Монад?

7
задан fredoverflow 21 September 2011 в 17:28
поделиться