diff options
| author | Dimitrios Vytiniotis <dimitris@microsoft.com> | 2011-11-16 16:12:48 +0000 |
|---|---|---|
| committer | Dimitrios Vytiniotis <dimitris@microsoft.com> | 2011-11-16 16:12:48 +0000 |
| commit | 0007c0ec9c0de68e3a348b8c4112ac48fd861b1e (patch) | |
| tree | 78ff33800fad55d7dbb4e1b1732d4f82c4e092a2 /compiler/hsSyn | |
| parent | 1bbb89f3ab009367fcca84b73b351ddcf5be16a4 (diff) | |
| download | haskell-0007c0ec9c0de68e3a348b8c4112ac48fd861b1e.tar.gz | |
GHC gets a new constraint solver. More efficient and smaller in size.
Diffstat (limited to 'compiler/hsSyn')
| -rw-r--r-- | compiler/hsSyn/HsBinds.lhs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/compiler/hsSyn/HsBinds.lhs b/compiler/hsSyn/HsBinds.lhs index c3728788f1..b6bc0c702b 100644 --- a/compiler/hsSyn/HsBinds.lhs +++ b/compiler/hsSyn/HsBinds.lhs @@ -486,19 +486,21 @@ data EvBindsVar = EvBindsVar (IORef EvBindMap) Unique -- The Unique is only for debug printing ----------------- -type EvBindMap = VarEnv EvBind +newtype EvBindMap = EvBindMap { ev_bind_varenv :: VarEnv EvBind } -- Map from evidence variables to evidence terms emptyEvBindMap :: EvBindMap -emptyEvBindMap = emptyVarEnv +emptyEvBindMap = EvBindMap { ev_bind_varenv = emptyVarEnv } extendEvBinds :: EvBindMap -> EvVar -> EvTerm -> EvBindMap -extendEvBinds bs v t = extendVarEnv bs v (EvBind v t) +extendEvBinds bs v t + = EvBindMap { ev_bind_varenv = extendVarEnv (ev_bind_varenv bs) v (EvBind v t) } lookupEvBind :: EvBindMap -> EvVar -> Maybe EvBind -lookupEvBind = lookupVarEnv +lookupEvBind bs = lookupVarEnv (ev_bind_varenv bs) evBindMapBinds :: EvBindMap -> Bag EvBind -evBindMapBinds = foldVarEnv consBag emptyBag +evBindMapBinds bs + = foldVarEnv consBag emptyBag (ev_bind_varenv bs) ----------------- instance Data TcEvBinds where @@ -551,6 +553,11 @@ Conclusion: a new wanted coercion variable should be made mutable. \begin{code} +mkEvCast :: EvVar -> LCoercion -> EvTerm +mkEvCast ev lco + | isReflCo lco = EvId ev + | otherwise = EvCast ev lco + emptyTcEvBinds :: TcEvBinds emptyTcEvBinds = EvBinds emptyBag |
