More GND + role inference woes

Richard Eisenberg eir at cis.upenn.edu
Tue Oct 15 04:22:48 UTC 2013


Yuck.

But, many, many thanks for discovering this now instead of later.

For various silly reasons, I didn't have a platform (i.e. a recent enough HEAD in the right state, etc.) for me to explore this today (Monday). But, I should have the time and ability to look closer on Tuesday.

If it's really as bad as you say, we'll need to think carefully about how to proceed. I have various thoughts about how to fix the problem, but none would be ready for 7.8 by a long shot. So, do we issue warnings (that a GND, or perhaps a use of `coerce` might not be safe) in 7.8? How would a user disable these warnings?

Anyway, more tomorrow.

Richard

On Oct 13, 2013, at 6:01 PM, Edward Kmett <ekmett at gmail.com> wrote:

> I didn't think I was using GND much at all, but apparently I was wrong.
> 
> After Ben's initial foray into building linear, I went and looked at the other applications of GeneralizedNewtypeDeriving in my code and found that in parsers, all of the derived instances for the supplied parser transformers fail.
> 
> This also affects any attempt to use GND to do deriving for any monad transformer stack that isn't fully instantiated to concrete terms. This is actually a very common idiom to avoid writing boilerplate on top of transformers:
> 
> newtype T m a = T { runT : StateT MyState (ReaderT MyEnv) m a }
>   deriving (Functor, Monad, Applicative, MonadState MyState, MonadReader MyEnv, ...)
> 
> As I rummage through more of my code, I actually can't find any instances of GND that do still work that aren't of the form:
> 
> newtype Foo a = Foo { runFoo :: a } deriving ...
> 
> Literally every other example I have of GND in the code I maintain has something in it that causes it to run afoul of the new roles machinery.
> 
> I'd say the problem is more widespread than we thought.
> 
> -Edward
> 
> 
> On Sun, Oct 13, 2013 at 5:26 PM, Edward Kmett <ekmett at gmail.com> wrote:
> Ben Gamari was trying to update my linear package to work with GHC HEAD.
> 
> Along the way he noted an example of the new GND+role inference machinery failing rather spectacularly.
> 
> http://hackage.haskell.org/package/linear-1.3/docs/src/Linear-Affine.html#Point
> 
> Note the number of classes that the current proposal would force us to hand implement. 
> 
> =(
> 
> -Edward
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20131015/7b1ffeaf/attachment-0001.html>


More information about the ghc-devs mailing list