Hi Carl, thanks for your reply.
I like solution 2, but am going to have to delve into the Perl 6 Documentation to understand its esoteric syntax: - class Tree { ... } - handles <left right>;, - self.bless(*,, etc.) Philippe ----- Mail original ----- De: "Carl Mäsak" <cma...@gmail.com> À: "Perl6" <perl6-language@perl.org> Envoyé: Jeudi 21 Mars 2013 17:45:45 Objet: Re: ADT and GADT Hi Philippe, Philippe (>): > will Abstract Data Types and Generalized Abstract Data Types be available in > Perl6 anytime soon? Algebraic Data Types -- this is a topic that has come up before on #perl6 on IRC. Often enough I've been the one mentioning it. Let's just stop briefly to define a few things that we may associate with ADTs. As an example, I'll throw up this classic ADT from Haskell: data Tree a = Branch (Tree a) (Tree a) | Leaf a Now, let's list what this gives us: (a) Nice syntax for (recursively) specifying the type. (b) Nice syntax for constructing values of the type. Not shown above, but equally important in my view, are the consumption end of ADTs: (c) Nice destructuring syntax when matching against a value. (d) Ease of binding the matched bits to variables and using those. Just for fun, I put together two ways to emulate ADTs in Perl 6. These two gists both run in Rakudo today. Using hashes and subclasses: <https://gist.github.com/masak/5213423> Using classes and subclasses: <https://gist.github.com/masak/5213563> I'd say the first solution does OK at (a), but it's not excellent and definitely contains boilerplate, especially in those subs. It does (b) OK, but only because things are very lax. It only begins to do (c) -- it doesn't look into the values -- and it doesn't really do (d) at all. In comparison, the second solution is a bit stricter with (b), in exchange for having a bit more boilerplate in (a). (c) and (d) are equally bad as in the first solution. Furthermore, what I'd really like to see is compiler support for all those four things -- basically type checking on ADTs at compile-time. People on #perl6 started talking about macros and how they would help here. I think that's a viable approach, but just how far it gets us remains to be seen. As to GADTs, I fear I don't understand them well enough to give a good answer there. But generally, Perl 6 doesn't do as much typechecking at compile time as would a strict language, so they may or may not be as feasible, or even as necessary. People who grok type theory better may be able to tell you more there, though. // Carl