X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Ftypecheck%2FTcRnTypes.lhs;h=a33faa16916a25cb58f32f95ff4083d43cdf8ad9;hp=0012325c670a350938b9f3475b49b04cd5d399fd;hb=30c122df62ec75f9ed7f392f24c2925675bf1d06;hpb=1d1c3c727617630beacacaf33022e1daba06a0bb diff --git a/compiler/typecheck/TcRnTypes.lhs b/compiler/typecheck/TcRnTypes.lhs index 0012325..a33faa1 100644 --- a/compiler/typecheck/TcRnTypes.lhs +++ b/compiler/typecheck/TcRnTypes.lhs @@ -53,7 +53,6 @@ import Packages import Type import Coercion import TcType -import TcGadt import InstEnv import FamInstEnv import IOEnv @@ -64,7 +63,7 @@ import NameSet import Var import VarEnv import Module -import UniqFM +import LazyUniqFM import SrcLoc import VarSet import ErrUtils @@ -75,6 +74,7 @@ import Bag import Outputable import ListSetOps import FiniteMap +import FastString import Data.Maybe import Data.List @@ -318,8 +318,8 @@ data TcLclEnv -- Changes as we move inside an expression tcl_ctxt :: ErrCtxt, -- Error context tcl_errs :: TcRef Messages, -- Place to accumulate errors - tcl_th_ctxt :: ThStage, -- Template Haskell context - tcl_arrow_ctxt :: ArrowCtxt, -- Arrow-notation context + tcl_th_ctxt :: ThStage, -- Template Haskell context + tcl_arrow_ctxt :: ArrowCtxt, -- Arrow-notation context tcl_rdr :: LocalRdrEnv, -- Local name envt -- Maintained during renaming, of course, but also during @@ -632,7 +632,7 @@ type Int, represented by Method 34 doubleId [Int] origin In addition to the basic Haskell variants of 'Inst's, they can now also -represent implication constraints 'forall tvs. (reft, given) => wanted' +represent implication constraints 'forall tvs. given => wanted' and equality constraints 'co :: ty1 ~ ty2'. NB: Equalities occur in two flavours: @@ -655,22 +655,17 @@ data Inst } | ImplicInst { -- An implication constraint - -- forall tvs. (reft, given) => wanted + -- forall tvs. given => wanted tci_name :: Name, tci_tyvars :: [TcTyVar], -- Quantified type variables - -- Includes coercion variables - -- mentioned in tci_reft - tci_reft :: Refinement, tci_given :: [Inst], -- Only Dicts and EqInsts -- (no Methods, LitInsts, ImplicInsts) - tci_wanted :: [Inst], -- Only Dicts and ImplicInsts + tci_wanted :: [Inst], -- Only Dicts, EqInst, and ImplicInsts -- (no Methods or LitInsts) tci_loc :: InstLoc } - -- NB: the tci_given are not necessarily rigid, - -- although they will be if the tci_reft is non-trivial - -- NB: the tci_reft is already applied to tci_given and tci_wanted + -- NB: the tci_given are not necessarily rigid | Method { tci_id :: TcId, -- The Id for the Inst