[GHC] #8767: Add rules involving `coerce` to the libraries
GHC
ghc-devs at haskell.org
Sun Nov 16 15:49:32 UTC 2014
#8767: Add rules involving `coerce` to the libraries
-------------------------------------+-------------------------------------
Reporter: nomeata | Owner: ekmett
Type: task | Status: new
Priority: normal | Milestone: 7.10.1
Component: Core | Version: 7.9
Libraries | Keywords:
Resolution: | Architecture: Unknown/Multiple
Operating System: | Difficulty: Unknown
Unknown/Multiple | Blocked By: 8718
Type of failure: | Related Tickets: #2110
None/Unknown |
Test Case: |
tests/simplCore/should_run/T2110.hs|
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Comment (by dfeuer):
Replying to [comment:21 dmcclean]:
> One possible thing would be to have an {-# UNLAWFUL #-} pragma, and when
you are magically generating instances you branch three ways instead of 2.
(Possibly such a pragma could allow more aggressive optimizations in other
cases too, with an opt out for 'criminals'?)
I think it would make more sense to track `Functor` instances believed to
be (sufficiently) lawful. A functor could be labeled `{-# LAWFUL #-}` in
either `Unsafe` or `Trustworthy` modules, and any ''derived'' `Functor`
instance without a `Functor` context could be treated as lawful as well. A
functor labeled as `{-# LAWFUL #-}` could of course be lawful only up to
some isomorphism; the pragma would declare that the instance won't break
in any important way if the compiler relies on the functor laws. A similar
mechanism could presumably be applied to other classes as well.
Interaction with extreme polymorphism: to really take advantage, you'd
presumably need to be able to express lawfulness in a context. So you'd
need to be able to write something like
{{{#!hs
g :: ({-# LAWFUL #-} Functor f) => ...
}}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8767#comment:25>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list