[GHC] #15106: Explore using pure unifier instead of monadic one
GHC
ghc-devs at haskell.org
Mon Apr 30 14:29:08 UTC 2018
#15106: Explore using pure unifier instead of monadic one
-------------------------------------+-------------------------------------
Reporter: goldfire | Owner: (none)
Type: task | Status: new
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.2.2
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
GHC contains no fewer than three unifiers! This ticket is about removing
one of them.
Here are the three:
1. The eager monadic unifier, implemented in `TcUnify`, takes the first
stab at unification during type inference. If it runs into trouble, it
defers the equality to the solver. It returns a coercion.
2. The pure unifier works to sort out type family reductions, instance
selection, and rule matching. It's implemented in `Unify`. This unifier
returns, upon success, a substitution.
3. The solver contains a unification-like algorithm in `TcCanonical` that
decomposes equalities en route to solving them.
Simon and I hit upon a radical idea this morning: what if eager
unification simply called the pure unifier? The pure unifier can also take
a set (or description) of variables that can be in the domain of the
returned substitution. In the case of the eager unifier, this domain would
be the metavariables. The pure unifier would, if successful, return a
substitution from metavariables to types, and the monadic code would
simply use this substitution to fill in the types.
It's not yet clear what the implications of this change would be on
performance, but it seems like an interesting idea to try.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15106>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list