[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / compiler / envs / InstEnv.hi
1 {-# GHC_PRAGMA INTERFACE VERSION 5 #-}
2 interface InstEnv where
3 import BasicLit(BasicLit)
4 import Class(Class, ClassOp)
5 import CoreSyn(CoreAtom, CoreBinding, CoreCaseAlternatives, CoreExpr)
6 import CostCentre(CostCentre)
7 import HsBinds(Binds)
8 import HsExpr(ArithSeqInfo, Expr, Qual)
9 import HsLit(Literal)
10 import HsMatches(Match)
11 import HsPat(InPat, TypecheckedPat)
12 import HsTypes(PolyType)
13 import Id(Id, IdDetails)
14 import IdInfo(IdInfo, SpecEnv, SpecInfo)
15 import Inst(Inst, InstOrigin, OverloadedLit)
16 import Maybes(Labda, MaybeErr)
17 import Name(Name)
18 import NameTypes(FullName, ShortName)
19 import PreludePS(_PackedString)
20 import PrimKind(PrimKind)
21 import PrimOps(PrimOp)
22 import SplitUniq(SplitUniqSupply)
23 import SrcLoc(SrcLoc)
24 import TyCon(TyCon)
25 import TyVar(TyVar, TyVarTemplate)
26 import UniType(UniType)
27 import Unique(Unique)
28 data Class      {-# GHC_PRAGMA MkClass Unique FullName TyVarTemplate [Class] [Id] [ClassOp] [Id] [Id] [(UniType, InstTemplate)] [(Class, [Class])] #-}
29 type ClassInstEnv = [(UniType, InstTemplate)]
30 data ClassOp    {-# GHC_PRAGMA MkClassOp _PackedString Int UniType #-}
31 data CoreExpr a b       {-# GHC_PRAGMA CoVar b | CoLit BasicLit | CoCon Id [UniType] [CoreAtom b] | CoPrim PrimOp [UniType] [CoreAtom b] | CoLam [a] (CoreExpr a b) | CoTyLam TyVar (CoreExpr a b) | CoApp (CoreExpr a b) (CoreAtom b) | CoTyApp (CoreExpr a b) UniType | CoCase (CoreExpr a b) (CoreCaseAlternatives a b) | CoLet (CoreBinding a b) (CoreExpr a b) | CoSCC CostCentre (CoreExpr a b) #-}
32 data Expr a b   {-# GHC_PRAGMA Var a | Lit Literal | Lam (Match a b) | App (Expr a b) (Expr a b) | OpApp (Expr a b) (Expr a b) (Expr a b) | SectionL (Expr a b) (Expr a b) | SectionR (Expr a b) (Expr a b) | CCall _PackedString [Expr a b] Bool Bool UniType | SCC _PackedString (Expr a b) | Case (Expr a b) [Match a b] | If (Expr a b) (Expr a b) (Expr a b) | Let (Binds a b) (Expr a b) | ListComp (Expr a b) [Qual a b] | ExplicitList [Expr a b] | ExplicitListOut UniType [Expr a b] | ExplicitTuple [Expr a b] | ExprWithTySig (Expr a b) (PolyType a) | ArithSeqIn (ArithSeqInfo a b) | ArithSeqOut (Expr a b) (ArithSeqInfo a b) | TyLam [TyVar] (Expr a b) | TyApp (Expr a b) [UniType] | DictLam [Id] (Expr a b) | DictApp (Expr a b) [Id] | ClassDictLam [Id] [Id] (Expr a b) | Dictionary [Id] [Id] | SingleDict Id #-}
33 data Id         {-# GHC_PRAGMA Id Unique UniType IdInfo IdDetails #-}
34 data Inst       {-# GHC_PRAGMA Dict Unique Class UniType InstOrigin | Method Unique Id [UniType] InstOrigin | LitInst Unique OverloadedLit UniType InstOrigin #-}
35 data InstOrigin         {-# GHC_PRAGMA OccurrenceOf Id SrcLoc | InstanceDeclOrigin SrcLoc | LiteralOrigin Literal SrcLoc | ArithSeqOrigin (ArithSeqInfo Name (InPat Name)) SrcLoc | SignatureOrigin | ClassDeclOrigin SrcLoc | DerivingOrigin (Class -> ([(UniType, InstTemplate)], ClassOp -> SpecEnv)) Class Bool TyCon SrcLoc | InstanceSpecOrigin (Class -> ([(UniType, InstTemplate)], ClassOp -> SpecEnv)) Class UniType SrcLoc | DefaultDeclOrigin SrcLoc | ValSpecOrigin Name SrcLoc | CCallOrigin SrcLoc [Char] (Labda (Expr Name (InPat Name))) | LitLitOrigin SrcLoc [Char] | UnknownOrigin #-}
36 data InstTemplate       {-# GHC_PRAGMA MkInstTemplate Id [UniType] [InstTy] #-}
37 data InstTy     {-# GHC_PRAGMA DictTy Class UniType | MethodTy Id [UniType] #-}
38 type InstanceMapper = Class -> ([(UniType, InstTemplate)], ClassOp -> SpecEnv)
39 data Labda a    {-# GHC_PRAGMA Hamna | Ni a #-}
40 type MatchEnv a b = [(a, b)]
41 data MaybeErr a b       {-# GHC_PRAGMA Succeeded a | Failed b #-}
42 type MethodInstInfo = (Id, [UniType], InstTemplate)
43 data TypecheckedPat     {-# GHC_PRAGMA WildPat UniType | VarPat Id | LazyPat TypecheckedPat | AsPat Id TypecheckedPat | ConPat Id UniType [TypecheckedPat] | ConOpPat TypecheckedPat Id TypecheckedPat UniType | ListPat UniType [TypecheckedPat] | TuplePat [TypecheckedPat] | LitPat Literal UniType | NPat Literal UniType (Expr Id TypecheckedPat) | NPlusKPat Id Literal UniType (Expr Id TypecheckedPat) (Expr Id TypecheckedPat) (Expr Id TypecheckedPat) #-}
44 data SpecInfo   {-# GHC_PRAGMA SpecInfo [Labda UniType] Int Id #-}
45 data SplitUniqSupply    {-# GHC_PRAGMA MkSplitUniqSupply Int SplitUniqSupply SplitUniqSupply #-}
46 data TyCon      {-# GHC_PRAGMA SynonymTyCon Unique FullName Int [TyVarTemplate] UniType Bool | DataTyCon Unique FullName Int [TyVarTemplate] [Id] [Class] Bool | TupleTyCon Int | PrimTyCon Unique FullName Int ([PrimKind] -> PrimKind) | SpecTyCon TyCon [Labda UniType] #-}
47 data TyVarTemplate      {-# GHC_PRAGMA SysTyVarTemplate Unique _PackedString | UserTyVarTemplate Unique ShortName #-}
48 data UniType    {-# GHC_PRAGMA UniTyVar TyVar | UniFun UniType UniType | UniData TyCon [UniType] | UniSyn TyCon [UniType] UniType | UniDict Class UniType | UniTyVarTemplate TyVarTemplate | UniForall TyVarTemplate UniType #-}
49 addClassInst :: Class -> [(UniType, InstTemplate)] -> UniType -> Id -> [TyVarTemplate] -> [(Class, UniType)] -> SrcLoc -> MaybeErr [(UniType, InstTemplate)] (Class, (UniType, SrcLoc), (UniType, SrcLoc))
50         {-# GHC_PRAGMA _A_ 7 _U_ 2222112 _N_ _S_ "LSLLLLL" _N_ _N_ #-}
51 lookupClassInstAtSimpleType :: Class -> UniType -> Labda Id
52         {-# GHC_PRAGMA _A_ 2 _U_ 12 _N_ _S_ "U(AAAAAAAASA)L" {_A_ 2 _U_ 22 _N_ _N_ _N_ _N_} _N_ _N_ #-}
53 lookupInst :: SplitUniqSupply -> Inst -> Labda (Expr Id TypecheckedPat, [Inst])
54         {-# GHC_PRAGMA _A_ 2 _U_ 21 _N_ _S_ "LS" _N_ _N_ #-}
55 lookupNoBindInst :: SplitUniqSupply -> Inst -> Labda [Inst]
56         {-# GHC_PRAGMA _A_ 2 _U_ 11 _N_ _S_ "LS" _N_ _N_ #-}
57 nullMEnv :: [(a, b)]
58         {-# GHC_PRAGMA _A_ 0 _N_ _N_ _N_ _F_ _IF_ARGS_ 2 0 X 1 _/\_ u0 u1 -> _!_ _NIL_ [(u0, u1)] [] _N_ #-}
59