
Hi José,
You may also want to weigh in on this issue:
http://hackage.haskell.org/trac/ghc/ticket/2782
The instance of Ratio changed between 6.10 and 6.8 in a way that means
a program can't reflect on the fields contained within the :%
constructor using the value undefined. The reason is that :% is marked
as strict in both arguments, so _|_ :% _|_ == _|_. This breaks
Uniplate, and I've had to explicitly make a test for a type of
Rational in the Uniplate code - which is ugly. I'm not sure how many
other programs this might break - or if the impact was well understood
when the change was made.
This change is made massively worse by giving the error message
"undefined" when it fails! If an SYB using program goes from working
in GHC 6.8 to failing in GHC 6.10 with "undefined", this may be a
culprit.
I'm not sure there is a nice solution - reflection at the type level
(using _|_ at the value level), combined with strictness at the value
level, has limitations. It may be that the reflection machinery in SYB
can be tweaked to either alert the user in advance (i.e. by getting
the strictness of various fields), or providing some operation
combining gmapQ and fromConstr which isn't strict. To see my use case
take a look at "contains" in:
http://www.cs.york.ac.uk/fp/darcs/uniplate/Data/Generics/PlateData.hs
Thanks
Neil
On Fri, Nov 21, 2008 at 5:28 PM, Simon Peyton-Jones
Thanks. And here is one more
http://hackage.haskell.org/trac/ghc/ticket/2750
For potentially-breaking changes the right thing to do is to announce (and justify) the proposed change using the usual library-change protocol, with a discussion period. The important thing is that someone is driving the discussion -- thank you very much for that. I'll assign these tickets to you.
Simon
From: josepedromagalhaes@gmail.com [mailto:josepedromagalhaes@gmail.com] On Behalf Of José Pedro Magalhães Sent: 21 November 2008 15:30 To: Simon Peyton-Jones Cc: libraries@haskell.org; Generics Mailing List Subject: Re: Generics
Hello Simon,
Thanks for pointing these out to me. I won't be able to look into this for the next week, but from what I could see so far, #2760 seems easy: copy mkNorepType to mkNoRepType, mark mkNorepType as deprecated and replace usage everywhere to avoid warnings and pass validation. I can submit the patch for this.
#2759 has some deeper implications, though. Replacing the FloatConstr Double by FloatConstr Rational might break existing client code (even though it probably wouldn't be too hard to fix it). Additionally, I see that the serializer code in compiler/utils/Serialized.hs would also need changes (it's no longer serializing a Double). But I guess this is also not too problematic...
Cheers, Pedro
On Fri, Nov 21, 2008 at 13:34, Simon Peyton-Jones
wrote: Jose
As part of your work on the SYB library, could you spare the time to look into these two library bug reports?
http://hackage.haskell.org/trac/ghc/ticket/2759 http://hackage.haskell.org/trac/ghc/ticket/2760
Many thanks
Simon
_______________________________________________ Generics mailing list Generics@haskell.org http://www.haskell.org/mailman/listinfo/generics