cd src
ghci Eval.hs
*Eval> eval [('P', True)] (Not (Var 'P'))
False
*Eval> eval [('P', True), ('Q', False)] (And (Var 'P') (Var 'Q'))
False
*Eval> eval [('P', True), ('Q', False)] (Or (Var 'P') (Var 'Q'))
True
*Eval> eval [('P', True), ('Q', False)] (Imp (Var 'P') (Var 'Q'))
False
*Eval> eval [('P', True), ('Q', True)] (Iff (Var 'P') (Var 'Q'))
True
*Eval> subst (And (Var 'P') (Var 'Q')) [('P', (Or (Var 'R') (Var 'S')))]
And (Or (Var 'R') (Var 'S')) (Var 'Q')