
It is certainly true that we start to have various SYB variants that the numbering scheme becomes clumsy :-) So it is actually good that some of the Bonn/Oxford work nicely uses qualifiers like revolutions etc. :-) I do agree with Bruno that some of the SYB flavors are so much different that they need to be characterized more or less separately. Oleg's flavor shouldn't have any fundamental issues with everywhere as far as I can see. (Bruno? Oleg?) I am only alerted by the fact that this flavor uses type codes to pass around functions (this is at least what I see in the initial email Oleg sent to me and SPJ after ICFP 2005). Best, Ralf
-----Original Message----- From: generics-bounces@haskell.org [mailto:generics-bounces@haskell.org] On Behalf Of Bruno Oliveira Sent: Wednesday, October 25, 2006 5:37 AM To: oleg@pobox.com Cc: generics@haskell.org Subject: Re: [Hs-Generics] Re: Scrap your boilerplate and Variants
Hello Oleg,
I have just committed the code for the alternative formulation of SYB3. It requires neither higher-rank types nor mutually recursive instances. Therefore, the code works even in Hugs (the original SYB3 code does not work in Hugs). The files are in the directory SYB31/. The `final' code is dat2.hs (dat1.hs is the `intermediate' step, which makes it easy to understand `dat2.hs'). The code has comments that describe which part of the code is the `Library', which part of the code is the `generic function' (independent of the data structure), and which part of the code overrides some general processing of the generic function. The code has two examples; one of them is gsize, from the original SYB3 paper.
I'd like to suggest two corrections to the SyB page: first, rank-2 types are not necessarily required for all flavors of SYB
second, the original SYB3 imposes one more requirement: mutually recursive instances. It is rarely mentioned -- but not universally implemented (Hugs does not have it). SYB31 shows that one can get by without that requirement. At the ICFP05 talk, Simon Peyton-Jones asserted that recursive instances are essential. I have publicly expressed doubts. Simon Peyton-Jones said: if you think otherwise, show me the code. And so I did.
I think we need to define first what do we consider by an SyB-like approach. I see that Ralf Lammel does not entirely agree that your code addressed exactly the same problems because, as I understand it, you miss the combinators like `everywhere` and `everything`.
However, and also as Ralf Lammel points out your library may still be useful. I guess the question here is if this should be considered a variant of SyB.
Perhaps we can settle this question by imposing that variants need to define `everywhere` and `everithing` combinators (or mechanism that achieve the same with the same amount of work)?
Even if in the end we decide that this is a different approach altogether, we can discuss it as a different proposal.
Cheers,
Bruno Oliveira
_______________________________________________ Generics mailing list Generics@haskell.org http://www.haskell.org/mailman/listinfo/generics