X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Ftypecheck%2FTcRnTypes.lhs;h=2ea26a82457f387aa4efa71611a625c8fbdfec4c;hp=6c8d648c50d928cffc067d93dbe24f2e3b6ad6f1;hb=6d2b0ae3ae3296cb6cdd496cbf85b897c7ce150b;hpb=17b297d97d327620ed6bfab942f8992b2446f1bf diff --git a/compiler/typecheck/TcRnTypes.lhs b/compiler/typecheck/TcRnTypes.lhs index 6c8d648..2ea26a8 100644 --- a/compiler/typecheck/TcRnTypes.lhs +++ b/compiler/typecheck/TcRnTypes.lhs @@ -3,11 +3,11 @@ % (c) The GRASP Project, Glasgow University, 1992-2002 % \begin{code} -{-# OPTIONS_GHC -w #-} +{-# 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/WorkingConventions#Warnings +-- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings -- for details module TcRnTypes( @@ -470,7 +470,7 @@ data RefinementVisibility -- 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))) @@ -635,6 +635,17 @@ In addition to the basic Haskell variants of 'Inst's, they can now also 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 { @@ -704,23 +715,22 @@ data Inst | 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