-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Basic type wrangling types and classes -- -- Primitive types and classes for Oleg-inspired type[class] manipulation @package data-type @version 0.1.0 module Data.Type.Proxy data Proxy a Proxy :: Proxy a module Data.Type.Nat data Z Z :: Z data S n S :: n -> S n zero :: Z one :: S Z two :: S (S Z) three :: S (S (S Z)) class Nat n fromNat :: (Nat n, Enum e) => n -> e instance Nat n => Nat (S n) instance Nat Z module Data.Type.TList data TNil TNil :: TNil data (:*:) a b (:*:) :: a -> b -> :*: a b module Data.Type.Bool data TTrue data TFalse tTrue :: TTrue tFalse :: TFalse class TNot a r | a -> r tNot :: TNot a r => a -> r class TAnd a b r | a b -> r tAnd :: TAnd a b r => a -> b -> r class TOr a b r | a b -> r tOr :: TOr a b r => a -> b -> r class CNot f r cNot :: CNot f r => f a -> r instance TNot (f a) r => CNot f r instance TOr a b r => TOr (f a) (g b) r instance TOr TTrue b TTrue instance TOr TFalse b b instance TAnd a b r => TAnd (f a) (g b) r instance TAnd TTrue b b instance TAnd TFalse b TFalse instance TNot a b => TNot (f a) b instance TNot TTrue TFalse instance TNot TFalse TTrue module Data.Type.Eq class TypeCast a b | a -> b, b -> a typeCast :: TypeCast a b => a -> b class TypeCast' t a b | t a -> b, t b -> a typeCast' :: TypeCast' t a b => t -> a -> b class TypeCast'' t a b | t a -> b, t b -> a typeCast'' :: TypeCast'' t a b => t -> a -> b class TypeEq x y b | x y -> b instance [overlap ok] TypeCast TFalse b => TypeEq x y b instance [overlap ok] TypeEq x x TTrue instance [overlap ok] TypeCast'' () a a instance [overlap ok] TypeCast'' t a b => TypeCast' t a b instance [overlap ok] TypeCast' () a b => TypeCast a b module Data.Type.Apply class Apply f a r | f a -> r apply :: Apply f a r => f -> a -> r instance Apply (x -> y) x y module Data.Type.Member data Member s member :: Member s mNil :: Member TNil mUnit :: a -> Member a mCons :: Member a -> Member b -> Member (a :*: b) instance (TypeEq h a b1, Apply (Member t) a b2, TOr b1 b2 b) => Apply (Member (h :*: t)) a b instance TypeEq s a b => Apply (Member s) a b instance Apply (Member TNil) a TFalse