#2440: Bad code with type families
-----------------------------------------+----------------------------------
Reporter: rl | Owner:
Type: run-time performance bug | Status: new
Priority: normal | Milestone: 6.10 branch
Component: Compiler | Version: 6.9
Severity: normal | Resolution:
Keywords: | Difficulty: Unknown
Testcase: | Os: Unknown/Multiple
Architecture: Unknown/Multiple |
-----------------------------------------+----------------------------------
Comment (by batterseapower):
Is there some reason the coercion for this case is so complicated? It
seems to me (with my admittedly limited knowledge of type coercions) that
we could improve it to:
(trans (sym (GHC.ST.NTCo:ST s GHC.Types.Int))
((sym (Foo.TFCo:R1:M s)) GHC.Types.Int))
:: STRep s Int ~ M (Vec s) Int
Here I have used the rewrite rules:
trans (x :: a ~ a) (x :: a ~ a) ==> x
sym (x :: a ~ a) ==> x
trans x (y :: a ~ a) ==> x
And optionally you could also do:
trans (sym x) (sym y) ==> sym (trans x y)
I don't think this helps fixing this bug at all, but it seemed a bit fishy
to me, and doing this improvement would at least help readability of Core.
Am I way off base here?
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2440#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs