-- Insts
Inst(..), EqInstCo, InstOrigin(..), InstLoc(..),
- pprInstLoc, pprInstArising, instLocSpan, instLocOrigin,
+ pprInstLoc, pprInstArising, instLocSpan, instLocOrigin, setInstLoc,
LIE, emptyLIE, unitLIE, plusLIE, consLIE, instLoc, instSpan,
plusLIEs, mkLIE, isEmptyLIE, lieToList, listToLIE,
-- Misc other types
- TcId, TcIdSet, TcDictBinds,
+ TcId, TcIdSet, TcDictBinds, TcTyVarBind(..), TcTyVarBinds
) where
type TcM a = TcRn a -- Historical
\end{code}
+Representation of type bindings to uninstantiated meta variables used during
+constraint solving.
+
+\begin{code}
+data TcTyVarBind = TcTyVarBind TcTyVar TcType
+
+type TcTyVarBinds = Bag TcTyVarBind
+
+instance Outputable TcTyVarBind where
+ ppr (TcTyVarBind tv ty) = ppr tv <+> text ":=" <+> ppr ty
+\end{code}
+
%************************************************************************
%* *
-- We still need the unsullied global name env so that
-- we can look up record field names
- tcl_env :: NameEnv TcTyThing, -- The local type environment: Ids and TyVars
- -- defined in this module
+ tcl_env :: NameEnv TcTyThing, -- The local type environment: Ids and
+ -- TyVars defined in this module
tcl_tyvars :: TcRef TcTyVarSet, -- The "global tyvars"
-- Namely, the in-scope TyVars bound in tcl_env,
- -- plus the tyvars mentioned in the types of Ids bound in tcl_lenv
- -- Why mutable? see notes with tcGetGlobalTyVars
+ -- plus the tyvars mentioned in the types of Ids bound
+ -- in tcl_lenv.
+ -- Why mutable? see notes with tcGetGlobalTyVars
- tcl_lie :: TcRef LIE -- Place to accumulate type constraints
+ tcl_lie :: TcRef LIE, -- Place to accumulate type constraints
+
+ tcl_tybinds :: TcRef TcTyVarBinds -- Meta and coercion type variable
+ -- bindings accumulated during
+ -- constraint solving
}
instLoc :: Inst -> InstLoc
instLoc inst = tci_loc inst
+setInstLoc :: Inst -> InstLoc -> Inst
+setInstLoc inst new_loc = inst { tci_loc = new_loc }
+
instSpan :: Inst -> SrcSpan
instSpan wanted = instLocSpan (instLoc wanted)
| ExprSigOrigin -- e :: ty
| RecordUpdOrigin
| ViewPatOrigin
+
| InstScOrigin -- Typechecking superclasses of an instance declaration
+
+ | NoScOrigin -- A very special hack; see TcSimplify,
+ -- Note [Recursive instances and superclases]
+
+
| DerivOrigin -- Typechecking deriving
| StandAloneDerivOrigin -- Typechecking stand-alone deriving
| DefaultOrigin -- Typechecking a default decl
ppr TupleOrigin = ptext (sLit "a tuple")
ppr NegateOrigin = ptext (sLit "a use of syntactic negation")
ppr InstScOrigin = ptext (sLit "the superclasses of an instance declaration")
+ ppr NoScOrigin = ptext (sLit "an instance declaration")
ppr DerivOrigin = ptext (sLit "the 'deriving' clause of a data type declaration")
ppr StandAloneDerivOrigin = ptext (sLit "a 'deriving' declaration")
ppr DefaultOrigin = ptext (sLit "a 'default' declaration")