In my very simple boolean expression toy program, I have the following evaluation function:
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
I was wondering if there was a way to pass the values table implicitly? Maybe with the help of Monads?
In this case, do not pass
valuesat all: