FP::Currying
use FP::Currying; # see usage below
Takes a function (coderef) f that takes 2 arguments, and returns a function that takes just 1 argument, which when called returns a function that takes again 1 argument and when called calls f with the two separately passed arguments.
use FP::Array 'array'; is_deeply curry(*array)->(10)->(20), [ 10, 20 ];
Same as curry but accepts multiple arguments in each step.
is_deeply curry_(*array, 1)->(10, 11)->(20, 21, 23), [ 1, 10, 11, 20, 21, 23 ];
Takes a function f and fewer than the normal arguments to f, and returns a fn that takes a variable number of additional args. When called, the returned function calls f with args + additional args.
(Same as curry_ but with only one step.)
is_deeply partial(*array, "hi", 1)->(3, 9), [ "hi", 1, 3, 9 ];
Sometimes it's easier to write code in a curried fashion. Often users still expect to receive an uncurried ("normal") version of the function. `uncurry_1_1 $fn` returns a function that expects 2 arguments, passes the first to $fn and then the second to the function that $fn returns. Other variants behave similarly: the appendix tells how many arguments each function level expects; the added numbers determine how many arguments the resulting function expects.
my $mult= uncurry sub { my ($x)=@_; sub { my ($y)=@_; $x*$y }}; is &$mult(2,3), 6; # 'uncurry' is an alias to 'uncurry_1_1'. my $mult3= uncurry_2_1 sub { my ($x,$y)=@_; sub { my ($z)=@_; $x*$y*$z }}; is &$mult3(2,3,4), 24;
Add tail-call optimization to the last call in the chain. Waiting till Sub::Call::Tail is fixed, or better, we've got a switchable variant.
There are also various modules for currying (curry, not uncurry) on CPAN.
`the_method` and `cut_method` in FP::Ops.
This is alpha software! Read the status section in the package README or on the website.
To install FunctionalPerl, copy and paste the appropriate command in to your terminal.
cpanm
cpanm FunctionalPerl
CPAN shell
perl -MCPAN -e shell install FunctionalPerl
For more information on module installation, please visit the detailed CPAN module installation guide.