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 mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell