{-# LANGUAGE UndecidableInstances, EmptyDataDecls,
    FlexibleInstances, MultiParamTypeClasses
    #-}
-- .$Header: c:/Source/Haskell/Type/Data/Type/RCS/Member.hs,v 1.2 2010/02/03 01:13:16 dosuser Exp dosuser $
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

-- vim: expandtab:tabstop=4:shiftwidth=4