module Data.Type.Member where
import Data.Type.Apply
import Data.Type.Bool
import Data.Type.Eq
import Data.Type.TList
data Member s
member :: Member s
member = undefined
mNil :: Member TNil
mNil = member
mUnit :: a -> Member a
mUnit _ = member
mCons :: Member a -> Member b -> Member (a :*: b)
mCons _ _ = member
infixr 5 `mCons`
instance Apply (Member TNil) a TFalse
instance TypeEq s a b => Apply (Member s) a b
instance (TypeEq h a b1, Apply (Member t) a b2, TOr b1 b2 b) =>
Apply (Member (h :*: t)) a b