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

ValueId i,
 hmm
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

  kc = recprop kc kcPD
