X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Ftypecheck%2FInst.lhs;h=962e4e08f315837e5c7fc964983f4867232c028b;hb=8e3b5645e0bab683444c81bbbac87e2df6799959;hp=a6d92a9c1bbc46a93f3f630a324d1c72a22e080c;hpb=2c8701fbebc0a6a49248392b53d977f0afdea4ec;p=ghc-hetmet.git diff --git a/compiler/typecheck/Inst.lhs b/compiler/typecheck/Inst.lhs index a6d92a9..962e4e0 100644 --- a/compiler/typecheck/Inst.lhs +++ b/compiler/typecheck/Inst.lhs @@ -31,7 +31,7 @@ module Inst ( isDict, isClassDict, isMethod, isImplicInst, isIPDict, isInheritableInst, isMethodOrLit, - isTyVarDict, isMethodFor, getDefaultableDicts, + isTyVarDict, isMethodFor, zonkInst, zonkInsts, instToId, instToVar, instName, @@ -54,7 +54,6 @@ import FunDeps import TcMType import TcType import Type -import Class import Unify import Module import Coercion @@ -211,26 +210,6 @@ isMethodOrLit (LitInst {}) = True isMethodOrLit other = False \end{code} -\begin{code} -getDefaultableDicts :: [Inst] -> ([(Inst, Class, TcTyVar)], TcTyVarSet) --- Look for free dicts of the form (C tv), even inside implications --- *and* the set of tyvars mentioned by all *other* constaints --- This disgustingly ad-hoc function is solely to support defaulting -getDefaultableDicts insts - = (concat ps, unionVarSets tvs) - where - (ps, tvs) = mapAndUnzip get insts - get d@(Dict {tci_pred = ClassP cls [ty]}) - | Just tv <- tcGetTyVar_maybe ty = ([(d,cls,tv)], emptyVarSet) - | otherwise = ([], tyVarsOfType ty) - get (ImplicInst {tci_tyvars = tvs, tci_wanted = wanteds}) - = ([ up | up@(_,_,tv) <- ups, not (tv `elemVarSet` tv_set)], - ftvs `minusVarSet` tv_set) - where - tv_set = mkVarSet tvs - (ups, ftvs) = getDefaultableDicts wanteds - get inst = ([], tyVarsOfInst inst) -\end{code} %************************************************************************ %* * @@ -303,7 +282,7 @@ instCallDicts loc (pred : preds) ; return (dict:dicts, co_fn <.> WpApp (instToId dict)) } ------------- -cloneDict :: Inst -> TcM Inst -- Only used for linear implicit params +cloneDict :: Inst -> TcM Inst cloneDict dict@(Dict nm ty loc) = do { uniq <- newUnique ; return (dict {tci_name = setNameUnique nm uniq}) } cloneDict other = pprPanic "cloneDict" (ppr other) @@ -329,7 +308,7 @@ newIPDict orig ip_name ty \begin{code} mkPredName :: Unique -> InstLoc -> PredType -> Name mkPredName uniq loc pred_ty - = mkInternalName uniq occ (srcSpanStart (instLocSpan loc)) + = mkInternalName uniq occ (instLocSpan loc) where occ = case pred_ty of ClassP cls _ -> mkDictOcc (getOccName cls) @@ -413,7 +392,7 @@ newMethod inst_loc id tys meth_id = mkUserLocal (mkMethodOcc (getOccName id)) new_uniq tau loc inst = Method {tci_id = meth_id, tci_oid = id, tci_tys = tys, tci_theta = theta, tci_loc = inst_loc} - loc = srcSpanStart (instLocSpan inst_loc) + loc = instLocSpan inst_loc in returnM inst \end{code}