% (c) The GRASP Project, Glasgow University, 1992-2002
%
\begin{code}
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
module TcRnTypes(
TcRnIf, TcRn, TcM, RnM, IfM, IfL, IfG, -- The monad is opaque outside this module
TcRef,
-- GADT refinement
instance Outputable TcTyThing where -- Debugging only
- ppr (AGlobal g) = ppr g
+ ppr (AGlobal g) = pprTyThing g
ppr elt@(ATcId {}) = text "Identifier" <>
ifPprDebug (brackets (ppr (tct_id elt) <> dcolon <> ppr (tct_type elt) <> comma
<+> ppr (tct_level elt) <+> ppr (tct_co elt)))
represent implication constraints 'forall tvs. (reft, given) => wanted'
and equality constraints 'co :: ty1 ~ ty2'.
+NB: Equalities occur in two flavours:
+
+ (1) Dict {tci_pred = EqPred ty1 ty2}
+ (2) EqInst {tci_left = ty1, tci_right = ty2, tci_co = coe}
+
+The former arises from equalities in contexts, whereas the latter is used
+whenever the type checker introduces an equality (e.g., during deferring
+unification).
+
+I am not convinced that this duplication is necessary or useful! -=chak
+
\begin{code}
data Inst
= Dict {
| EqInst { -- delayed unification of the form
-- co :: ty1 ~ ty2
- tci_left :: TcType, -- ty1
- tci_right :: TcType, -- ty2
+ tci_left :: TcType, -- ty1 -- both types are...
+ tci_right :: TcType, -- ty2 -- ...free of boxes
tci_co :: Either -- co
- TcTyVar -- a wanted equation, with a hole, to be
- -- filled with a witness for the equality
- -- for equation generated by the
- -- unifier, 'ty1' is the actual and
- -- 'ty2' the expected type
- Coercion, -- a given equation, with a coercion
- -- witnessing the equality
- -- a coercion that originates from a
- -- signature or a GADT is a CoVar, but
- -- after normalisation of coercions,
- -- they can be arbitrary Coercions
- -- involving constructors and
- -- pseudo-constructors like sym and
- -- trans.
+ TcTyVar -- - a wanted equation, with a hole, to be
+ -- filled with a witness for the equality;
+ -- for equation arising from deferring
+ -- unification, 'ty1' is the actual and
+ -- 'ty2' the expected type
+ Coercion, -- - a given equation, with a coercion
+ -- witnessing the equality;
+ -- a coercion that originates from a
+ -- signature or a GADT is a CoVar, but
+ -- after normalisation of coercions, they
+ -- can be arbitrary Coercions involving
+ -- constructors and pseudo-constructors
+ -- like sym and trans.
tci_loc :: InstLoc,
tci_name :: Name -- Debugging help only: this makes it easier to