precedence bug with derived instances
Christian Sievers
sievers@math2.nat.tu-bs.de
Tue, 29 Oct 2002 17:59:19 +0100
Simon Peyton-Jones wrote:
> I can only make minimal changes now. I suspect the smallest change is
> to require that
> (x,"") `elem` readsPrec d (showsPrec d x "")
>
> This weakens the existing equation by not requiring (x,"") to be the
> first parse returned.
>
> Dean writes:
> | Perhaps we want:
> |
> | readsPrec should be able to parse the string produced by showsPrec,
> and
> | should deliver the value that showsPrec started with. That is, the
> list
> | result of
> |
> | readsPrec d (showsPrec d x "")
> |
> | should contain exactly one pair whose second element is "", and the
> first
> | element of that pair should be equivalent to x.
>
> I don't understand this. What does "equivalent" mean? And how does
> this differ from the (incorrect) claim that
>
> readsPrec d (showsPrec d x "") == [(x,"")]
That >> whose second element is "" << obviously means to apply
filter (("" ==) . snd)
to the list. Using list comprehension, that gives
[ r | (r,"") <- readsPrec d (showsPrec d x "") ] == [x]
This is nearly what you suggested, with the additional condition that there
may only be one complete parse. I think this is what we want.
I guess "equivalent" just means equality without suggesting that the type is
an instance of Eq. There are other places where the report uses == in
situations where you can't really apply it, for example, in D.2 it says
"we would have
[Orange ..] == [Orange, Yellow, Green]",
which is true, but we can't use this expresion and expect it to reduce to
True, because it is just not type correct. So I think we should ignore this
problem now.
All the best
Christian Sievers