content: module TiProp where
  import PropSyntax
  import TI
  --import TiBaseStruct
  import FreeNamesProp
  import DefinedNamesProp
  import NameMapsProp
  import TiPropStruct(tcPD,checkPredicateRec)
  import TiBaseStruct(tcE,tcD,checkTypeSynRec,checkClassRec)
  import TiPropInstances
  import PrettyPrint
  --import MUtils(( # ))
  
  instance (TypeId i,ValueId i,PrintableOp i,Fresh i,HasSrcLoc i,TypedId PId i)
        => TypeCheckDecl i (HsDeclI i) [HsDeclI i] where
    tcDecl bs = recprop (tcD bs) (tcPD bs)
  
  instance Eq i => CheckRecursion i (HsDeclI i) where
    checkRecursion ds = do checkTypeSynRec ds
  			 checkClassRec ds
  		         checkPredicateRec ds
  
  instance (TypeId i,ValueId i,PrintableOp i,Fresh i,HasSrcLoc i,TypedId PId i)
        => TypeCheck i (HsExpI i) (Typed i (HsExpI i)) where
    tc (Exp e) = tcE e
  
  instance (TypeId i,ValueId i,PrintableOp i,Fresh i,HasSrcLoc i,TypedId PId i)
        => TypeCheck i (AssertionI i) (Typed i (AssertionI i)) where
    tc (PA e) = tc e
  
  instance (TypeId i,ValueId i,PrintableOp i,Fresh i,HasSrcLoc i,TypedId PId i)
        => TypeCheck i (PredicateI i) (Typed i (PredicateI i)) where
    tc (PP e) = tc e
  
  instance ({-ValueId i,-}TypeVar i) => KindCheck i (HsDeclI i) () where
    kc = recprop kc kcPD
      where kcPD _ = return () -- hmm
  