diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2018-08-24 08:14:15 +0100 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2018-08-24 10:31:25 +0100 |
commit | 184a569c5f5fe6e2eed73b2cff35722918c44efd (patch) | |
tree | e798334dea7d105ab07b9be7e03a16b7602dd6a5 /compiler/ghci | |
parent | 14d88380ecb909e7032598aaad4efebb72561784 (diff) | |
download | haskell-184a569c5f5fe6e2eed73b2cff35722918c44efd.tar.gz |
Clean up TcHsSyn.zonkEnv
Triggered by Trac #15552, I'd been looking at ZonkEnv in TcHsSyn.
This patch does some minor refactoring
* Make ZonkEnv into a record with named fields, and use them.
(I'm planning to add a new field, for TyCons, so this prepares
the way.)
* Replace UnboundTyVarZonker (a higer order function) with the
simpler and more self-descriptive ZonkFlexi data type, below.
It's just much more perspicuous and direct, and (I suspect)
a tiny bit faster too -- no unknown function calls.
data ZonkFlexi -- See Note [Un-unified unification variables]
= DefaultFlexi -- Default unbound unificaiton variables to Any
| SkolemiseFlexi -- Skolemise unbound unification variables
-- See Note [Zonking the LHS of a RULE]
| RuntimeUnkFlexi -- Used in the GHCi debugger
There was one knock-on effect in the GHCi debugger -- the
RuntimeUnkFlexi case. Somehow previously, these RuntimeUnk
variables were sometimes getting SystemNames (and hence
printed as 'a0', 'a1', etc) and sometimes not (and hence
printed as 'a', 'b' etc). I'm not sure precisely why, but
the new behaviour seems more uniform, so I just accepted the
(small) renaming wibbles in some ghci.debugger tests.
I had a quick look at perf: any changes are tiny.
Diffstat (limited to 'compiler/ghci')
-rw-r--r-- | compiler/ghci/RtClosureInspect.hs | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/compiler/ghci/RtClosureInspect.hs b/compiler/ghci/RtClosureInspect.hs index 95c2e37136..34a0098bda 100644 --- a/compiler/ghci/RtClosureInspect.hs +++ b/compiler/ghci/RtClosureInspect.hs @@ -39,7 +39,7 @@ import Var import TcRnMonad import TcType import TcMType -import TcHsSyn ( zonkTcTypeToType, mkEmptyZonkEnv ) +import TcHsSyn ( zonkTcTypeToType, mkEmptyZonkEnv, ZonkFlexi( RuntimeUnkFlexi ) ) import TcUnify import TcEnv @@ -1257,17 +1257,8 @@ zonkTerm = foldTermM (TermFoldM zonkRttiType :: TcType -> TcM Type -- Zonk the type, replacing any unbound Meta tyvars --- by skolems, safely out of Meta-tyvar-land -zonkRttiType = zonkTcTypeToType (mkEmptyZonkEnv zonk_unbound_meta) - where - zonk_unbound_meta tv - = ASSERT( isTcTyVar tv ) - do { tv' <- skolemiseRuntimeUnk tv - -- This is where RuntimeUnks are born: - -- otherwise-unconstrained unification variables are - -- turned into RuntimeUnks as they leave the - -- typechecker's monad - ; return (mkTyVarTy tv') } +-- by RuntimeUnk skolems, safely out of Meta-tyvar-land +zonkRttiType = zonkTcTypeToType (mkEmptyZonkEnv RuntimeUnkFlexi) -------------------------------------------------------------------------------- -- Restore Class predicates out of a representation type |