Larry wrote:
> Actually, I'm thinking we should just go with a single method and
> have it merely default to :lang<Perl>. But .repr is rather ugly.
> How 'bout .pretty instead? If we made the language the first optional
> argument you could have $x.pretty('Lisp'), $x.pretty('C#'), etc.Hmmmmm, maybe we shouldn't introduce oxymorons into the language. ;-)
Actually, I'd have thought that the type coercion mechanism might be a more appropriate way to go here. After all, the serialization of a data structure is merely a coercion to a subtype of Str. Specifically, I imagine a parameterized Source subtype:
class Source[Language ::To] is Str {
multi sub *coerce:as (Any $data, To ::Lang) {
return Lang.serialize($data)
}
}Then you could just write:
my $good = $x as Source[Perl];
my $bad = $x as Source[C::Sharp];
my $ugly = $x as Source[Lisp];And adding a new serialization would simply mean adding a new Language subclass with an appropriate .serialize() method:
class YAML is Language {
method serialize($data) {
...
}
} class XML is Language {
method serialize($data) {
...
}
}# etc.
Damian
