eval :: Ord var => Map var Bool -> Proposition var -> Bool
eval ctx prop = evalP $ fmap (ctx Map.!) prop
where
evalP = \case
Var b -> b
Not q -> not $ evalP q
And p q -> evalP p && evalP q
Or p q -> evalP p || evalP q
If p q -> evalP p ==> evalP q
Iff p q -> evalP p == evalP q