fork download
  1. import Prelude hiding ((&&), (||), not)
  2.  
  3. infixr 3 &&
  4. infixr 2 ||
  5.  
  6. data Trivalent = TriFalse | TriUnknown | TriTrue deriving (Show, Eq, Ord)
  7.  
  8. (&&) :: Trivalent -> Trivalent -> Trivalent
  9. TriFalse && _ = TriFalse
  10. _ && TriFalse = TriFalse
  11. TriTrue && TriTrue = TriTrue
  12. _ && _ = TriUnknown
  13.  
  14. (||) :: Trivalent -> Trivalent -> Trivalent
  15. TriTrue || _ = TriTrue
  16. _ || TriTrue = TriTrue
  17. TriFalse || TriFalse = TriFalse
  18. _ || _ = TriUnknown
  19.  
  20. not :: Trivalent -> Trivalent
  21. not TriTrue = TriFalse
  22. not TriFalse = TriTrue
  23. not TriUnknown = TriUnknown
  24.  
  25. main = do
  26. print $ TriTrue && TriFalse
  27. print $ not (TriFalse || TriUnknown)
  28. print $ not (TriUnknown || TriFalse && TriTrue)
Success #stdin #stdout 0.01s 3540KB
stdin
Standard input is empty
stdout
TriFalse
TriUnknown
TriUnknown