Hi, Rob Kinyon wrote: > What about the function compose() that would live in the module > "keyword", imported by the incantation "use keyword qw( compose );"?
FWIW, I like "o" better -- function composing is very often used in FP, and should therefore have a short name. Luckily, it's very easy to define that: sub *infix:<o>(Code $a, Code $b) {...} > multimethod compose (@*List) { > return { > $_() for @List; > }; > } I don't that will work for functions that take arguments. My take at it: sub compose (Code [EMAIL PROTECTED]) { # Note: We're losing compile-time type checking here. return -> [EMAIL PROTECTED] is copy { @args = $_([EMAIL PROTECTED]) for reverse @fs; return @args; }; } sub f(Int $x) { 100 + $x } sub g(Int $x) { 2 * $x } my $f_o_g = compose &f, &g; say $f_o_g(42); # 184 Is there a way to not lose compile-time type checking, so that the following will barf at compile time? sub f(Int $x) returns Int { 100 + $x } sub g(Int $a, Int $b) returns Int {...} my $f_o_g = compose &f, &g; # should die --Ingo -- Linux, the choice of a GNU | Life would be so much easier if we could generation on a dual AMD | just look at the source code. Athlon! | -- Dave Olson