[Hs-Generics] RE: Generics

Neil Mitchell ndmitchell at gmail.com
Thu Nov 27 07:17:21 EST 2008


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
<simonpj at microsoft.com> wrote:
> 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 at gmail.com [mailto:josepedromagalhaes at gmail.com] On
> Behalf Of José Pedro Magalhães
> Sent: 21 November 2008 15:30
> To: Simon Peyton-Jones
> Cc: libraries at 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 <simonpj at microsoft.com>
> 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/generics
>
>


More information about the Libraries mailing list