fork(1) download
  1. infixl 6 :& ; infixl 5 :|
  2. data Expr = EFalse| ETrue | Not Expr | Expr :& Expr | Expr :| Expr
  3. deriving Show
  4.  
  5. optimize (Not e) = case e of
  6. Not e -> optimize e
  7. e1 :& e2 -> optimize (Not e1) :| optimize (Not e2)
  8. e1 :| e2 -> optimize (Not e1) :& optimize (Not e2)
  9. e -> Not e
  10. optimize (e1 :& e2) = optimize e1 :& optimize e2
  11. optimize (e1 :| e2) = optimize e1 :| optimize e2
  12. optimize e = e
  13.  
  14. main = print $ optimize $ Not (Not ETrue :& Not EFalse :| (EFalse :| Not ETrue))
Success #stdin #stdout 0s 6220KB
stdin
Standard input is empty
stdout
(ETrue :| EFalse) :& (Not EFalse :& ETrue)