Am Dienstag, 19. Februar 2008 21:44 schrieben Sie: > * Support of type-level Booleans (Wolfgang?)
Attached is just a quickly hacked Boolean module. Nothing very special. I’d be happy if you could prettify this (choose better names, add documentation, etc.). Thanks for any effort. Best wishes, Wolfgang
{-# LANGUAGE EmptyDataDecls, MultiParamTypeClasses, FunctionalDependencies #-} module Data.TypeLevel.Boolean ( -- * Data False, false, True, true, -- * Operations And (and), Or (or), Xor (xor), Imp (imp), Equ (equ) ) where -- * Data class Boolean boolean data False instance Boolean False false :: False false = undefined data True instance Boolean True true :: True true = undefined -- * Operations class (Boolean boolean, Boolean boolean') => Not boolean boolean' | boolean -> boolean', boolean' -> boolean where not :: boolean -> boolean' instance Not False True where not _ = true instance Not True False where not _ = false class (Boolean boolean1, Boolean boolean2, Boolean boolean') => And boolean1 boolean2 boolean' | boolean1 boolean2 -> boolean' where and :: boolean1 -> boolean2 -> boolean' instance And False False False where and _ _ = false instance And False True False where and _ _ = false instance And True False False where and _ _ = false instance And True True True where and _ _ = true class (Boolean boolean1, Boolean boolean2, Boolean boolean') => Or boolean1 boolean2 boolean' | boolean1 boolean2 -> boolean' where or :: boolean1 -> boolean2 -> boolean' instance Or False False False where or _ _ = false instance Or False True True where or _ _ = true instance Or True False True where or _ _ = true instance Or True True True where or _ _ = true class (Boolean boolean1, Boolean boolean2, Boolean boolean') => Xor boolean1 boolean2 boolean' | boolean1 boolean2 -> boolean', boolean1 boolean' -> boolean2, boolean2 boolean' -> boolean1 where xor :: boolean1 -> boolean2 -> boolean' instance Xor False False False where xor _ _ = false instance Xor False True True where xor _ _ = true instance Xor True False True where xor _ _ = true instance Xor True True False where xor _ _ = false class (Boolean boolean1, Boolean boolean2, Boolean boolean') => Imp boolean1 boolean2 boolean' | boolean1 boolean2 -> boolean' where imp :: boolean1 -> boolean2 -> boolean' instance Imp False False True where imp _ _ = true instance Imp False True True where imp _ _ = true instance Imp True False False where imp _ _ = false instance Imp True True True where imp _ _ = true class (Boolean boolean1, Boolean boolean2, Boolean boolean') => Equ boolean1 boolean2 boolean' | boolean1 boolean2 -> boolean', boolean1 boolean' -> boolean2, boolean2 boolean' -> boolean1 where equ :: boolean1 -> boolean2 -> boolean' instance Equ False False True where equ _ _ = true instance Equ False True False where equ _ _ = false instance Equ True False False where equ _ _ = false instance Equ True True True where equ _ _ = true
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe