NAME
FP::uncurry
SYNOPSIS
use FP::uncurry;
my $mult= uncurry sub { my ($x)=@_; sub { my ($y)=@_; $x*$y }};
&$mult(2,3) # -> 6
# 'uncurry' is an alias to 'uncurry_1_1'
my $mult= uncurry_1_1 sub { my ($x)=@_; sub { my ($y)=@_; $x*$y }};
&$mult(2,3) # -> 6
my $mult3= uncurry_2_1 sub { my ($x,$y)=@_; sub { my ($z)=@_; $x*$y*$z }};
&$mult3(2,3,4) # -> 24
DESCRIPTION
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.
TODO
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.
SEE ALSO
There are various modules for currying (the inverse of uncurry) on CPAN.
`the_method` and `cut_method` in FP::Ops.
NOTE
This is alpha software! Read the package README.