
On Mon, Mar 24, 2014 at 10:28 AM, Brandon Allbery
On Mon, Mar 24, 2014 at 10:14 AM, Mark Lentczner
wrote:
On Fri, Mar 14, 2014 at 2:36 AM, Johan Tibell
wrote: I'm quite worried about this change though. I thought the default rolefor data type was nominal, as that's the safe default. *If the default is representational, every package author will need to be aware of this feature and update their packages.* That's quite a high cost.
On Fri, Mar 14, 2014 at 6:00 AM, Brandon Allbery
wrote: *Nominal default breaks everything that uses newtype deriving and doesn't
have role annotations, doesn't it?* Representational default means things behave in 7.8 as they did in earlier GHCs.
Am I reading these pair of statements correctly? It seems to imply to me that *every* parameterized type that uses a type constraint on a parameter *must* be reviewed and possibly annotated to work correctly, one way or the other!
No; if the default is representational, everything works as it did in earlier versions, potential bugs/unsafety and all. If the default is immediately switched to nominal, *then* every affected type must be reviewed immediately. My counter-proposal was to have 7.8 default to representational to give library maintainers a release cycle to add the necessary annotations, then switch the default to nominal in 7.10 to get the additional safety.
By the way, since I suspected (and was subsequently proved out) that appropriate warnings are difficult, perhaps there should be some mechanism to specify to ghc 7.8 whether a compile should default to representational or nominal so that authors have a way to test their code / look for problems. -- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net