[GHC] #8767: Add rules involving `coerce` to the libraries
GHC
ghc-devs at haskell.org
Fri Mar 14 14:02:47 UTC 2014
#8767: Add rules involving `coerce` to the libraries
-------------------------------------------------+-------------------------
Reporter: nomeata | Owner:
Type: task | Status: new
Priority: normal | Milestone: 7.8.1
Component: libraries/base | Version:
Resolution: | 7.8.1-rc2
Operating System: Unknown/Multiple | Keywords:
Type of failure: None/Unknown | Architecture:
Test Case: | Unknown/Multiple
tests/simplCore/should_run/T2110.hs | Difficulty:
Blocking: | Unknown
| Blocked By: 8718
| Related Tickets: #2110
-------------------------------------------------+-------------------------
Comment (by goldfire):
Right. I forgot that #2110 isn't getting into 7.8. Then, neither should
this.... which is good, because I agree that maybe some more thought is
required.
I was ''not'' suggesting that there be a blanket `fmap coerce --> coerce`
rule, just that we should add the specific rules for all the individual
(lawful) `Functor`s that we define. I agree completely that users should
be free to write unlawful `Functor`s if they wish to do so.
I don't believe there's a link to earlier discussions on `fmap coerce`
issue because the discussions happened among actual humans, in an actual
room, instead of among computers online. It's an amazing thought. In any
case, I remember one conclusion being a suggestion to add a new method to
`Functor` being `fmapCoerce :: Coercible a b => f a -> f b`. This would
have a default implementation of `fmapCoerce = fmap coerce` (no surprise
there) but could be reimplemented where there would be a performance
improvement.
Returning to Edward's comment, I guess I don't understand the limits of
the RULES mechanism to respond all that intelligently. In Core, anything
that looks like `fmap coerce` in the source code would look something like
`$fmapIdForSomeInstance <type parameters> (\x -> x |> co)`. This should be
easy enough to match at the Core level. If it's impossible to write a RULE
that desugars to the pattern above, then I think it's a bug (er, feature
request) in the RULES mechanism, not a call for a change to the `Functor`
definition.
Though I'm not dead set against `fmapCoerce` in `Functor`, I believe that
if we have to add such a thing, then there is a weakness in our design
somewhere. During the conversations at ICFP, I was unaware of #2110 and
Joachim's efforts to fix that bug. Now that we have that fixed, I believe
`fmapCoerce` should be avoidable.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8767#comment:11>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list