[GHC] #14899: Significant compilation time regression between 8.4 and HEAD due to coverage checking
GHC
ghc-devs at haskell.org
Sun Mar 11 14:24:17 UTC 2018
#14899: Significant compilation time regression between 8.4 and HEAD due to
coverage checking
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner: (none)
Type: bug | Status: new
Priority: highest | Milestone: 8.6.1
Component: Compiler | Version: 8.5
Resolution: | Keywords:
| PatternMatchWarnings
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by RyanGlScott):
(Warning: half-baked thoughts follow.)
For reasons that I don't fully understand, it seems that coverage-checking
guards is not nearly as efficient as coverage-checking raw constructor
patterns. In that case, a question arises: why are we desugaring coercion
patterns (like what data family constructors give you) to guards? It seems
that we could handle coercion patterns in a fairly natural way by
extending the algorithm from [https://www.microsoft.com/en-us/research/wp-
content/uploads/2016/08/gadtpm-acm.pdf GADTs Meet Their Match] slightly.
First, we could extend the pattern syntax (figure 2 from the GADTs Meet
Their Match paper) to include coercion patterns directly:
{{{
p,x ::= x | K p_1 ... p_n | G | (p |> co)
}}}
Where `co : τ_1 ~ τ_2` is a coercion.
Then, we could extend the coverage checking algorithm in figure 3 to
include a case for coercion patterns. For instance:
{{{
C ((p |> co) q_1 ... q_n) (Γ ⊢ u_0 u_1 ... u_n ⊳ Δ)
= C (p q_1 ... q_n) (Γ, y : τ_1 ⊢ y u_0 u_1 ... u_n ⊳ Δ')
where
Γ ⊢ p : τ_1
Γ ⊢ u_o : τ_2
Γ ⊢ c : τ_1 ~ τ_2
y#Γ
Δ' = Δ ∪ u ≈ (p |> co)
}}}
And similarly for U and D. That way, we wouldn't need guards at all
here—we'd just have an extra case for coercion patterns that "pushes
through" the types as necessary.
Does this sound plausible?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14899#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list