module Type.Bool where
import Data.Typeable
import Prelude
import GHC.Exts (Constraint)
type family And a b where
And True True = True
And a b = False
type family Or a b where
Or True b = True
Or a True = True
Or a b = False
type family Xor a b where
Xor True True = False
Xor True b = True
Xor a True = True
Xor a b = False
type family If (cond :: Bool) (a :: k) (b :: k) :: k where
If cond a a = a
If True a b = a
If False a b = b
type family If' (cond :: Bool) (a :: Constraint) (b :: Constraint) :: Constraint where
If' cond a a = a
If' True a b = a
If' False a b = b
type family (:==) (a :: k) (b :: l) where
a :== a = True
a :== b = False