[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / compiler / typecheck / Subst.hi
1 {-# GHC_PRAGMA INTERFACE VERSION 5 #-}
2 interface Subst where
3 import Bag(Bag)
4 import Class(Class)
5 import Maybes(Labda)
6 import NameTypes(ShortName)
7 import PreludeGlaST(_MutableArray)
8 import TyCon(TyCon)
9 import TyVar(TyVar, TyVarTemplate)
10 import UniType(UniType)
11 import Unique(Unique)
12 data Subst      {-# GHC_PRAGMA MkSubst (_MutableArray _RealWorld Int (Labda UniType)) [(Int, Bag (Int, Labda UniType))] (_State _RealWorld) Int #-}
13 data SubstResult   = SubstOK | OccursCheck TyVar UniType | AlreadyBound UniType
14 data TyVar      {-# GHC_PRAGMA PrimSysTyVar Unique | PolySysTyVar Unique | OpenSysTyVar Unique | UserTyVar Unique ShortName #-}
15 data UniType    {-# GHC_PRAGMA UniTyVar TyVar | UniFun UniType UniType | UniData TyCon [UniType] | UniSyn TyCon [UniType] UniType | UniDict Class UniType | UniTyVarTemplate TyVarTemplate | UniForall TyVarTemplate UniType #-}
16 applySubstToThetaTy :: Subst -> [(Class, UniType)] -> (Subst, [(Class, UniType)])
17         {-# GHC_PRAGMA _A_ 2 _U_ 21 _N_ _S_ "LS" _N_ _N_ #-}
18 applySubstToTy :: Subst -> UniType -> (Subst, UniType)
19         {-# GHC_PRAGMA _A_ 2 _U_ 22 _N_ _S_ "LS" _N_ _N_ #-}
20 applySubstToTyVar :: Subst -> TyVar -> (Subst, UniType)
21         {-# GHC_PRAGMA _A_ 2 _U_ 22 _N_ _N_ _N_ _N_ #-}
22 combineSubstUndos :: Subst -> Subst
23         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "U(LSLL)" {_A_ 4 _U_ 2122 _N_ _N_ _N_ _N_} _N_ _N_ #-}
24 extendSubst :: TyVar -> UniType -> Subst -> (Subst, SubstResult)
25         {-# GHC_PRAGMA _A_ 2 _U_ 221 _N_ _N_ _N_ _N_ #-}
26 getSubstTyVarUnique :: Subst -> (Subst, Unique)
27         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "U(U(U(LU(P))P)LLU(P))" {_A_ 5 _U_ 22222 _N_ _N_ _N_ _N_} _N_ _N_ #-}
28 getSubstTyVarUniques :: Int -> Subst -> (Subst, [Unique])
29         {-# GHC_PRAGMA _A_ 2 _U_ 11 _N_ _S_ "U(P)U(U(U(LU(P))P)LLU(P))" {_A_ 5 _U_ 22222 _N_ _N_ _N_ _N_} _N_ _N_ #-}
30 mkEmptySubst :: Int -> Subst
31         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _N_ _N_ _N_ #-}
32 pushSubstUndos :: Subst -> Subst
33         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "U(LLLL)" {_A_ 4 _U_ 2222 _N_ _N_ _N_ _N_} _N_ _N_ #-}
34 undoSubstUndos :: Subst -> Subst
35         {-# GHC_PRAGMA _A_ 1 _U_ 1 _N_ _S_ "U(LSLL)" {_A_ 4 _U_ 2112 _N_ _N_ _N_ _N_} _N_ _N_ #-}
36