++ed by:
4 non-PAUSE users
Shohei Yoshida
and 7 contributors

# NAME

Data::Util::Curry - Curries functions and methods

# SYNOPSIS

``````        use feature 'say';
use Data::Util qw(curry);

sub sum{
my \$total = 0;
for my \$x(@_){
\$total += \$x;
}
return \$total;
}

# placeholder "\0" indicates a subscript of the arguments
say curry(\&add, \0, 42)->(10); # 52

# placeholder "*_" indicates all the arguments
say curry(\&add, *_)->(1 .. 10); # 55

# two subscripts and the rest of the arguments
say curry(\&add, *_, \1, \0)->(1 .. 5); # 3 + 4 + 5 + 1 + 2``````

(todo)

# EXAMPLES

## Currying Functions

``````        curry(\&f, \0, 2)->(1); # f(1, 2)
curry(\&f, 3, \0)->(4); # f(3, 4)
curry(\&f, *_)->(5, 6); # f(5, 6)

curry(\&f, \0, \1, *_)->(1, 2, 3, 4); # f(1, 2, 3, 4)
curry(\&f, *_, \0, \1)->(1, 2, 3, 4); # f(3, 4, 1, 2)``````

## Currying Methods

``````        curry(\$obj, 'something', *_)->(1, 2);  # \$obj->something(1, 2)

curry(\$obj, 'something',
foo => \0,
bar => \1)->(1, 2); # \$obj->something(foo => 1, bar => 2)

curry(\0, 'something', \1)->(\$obj, 42);   # \$obj->something(42)
curry(\$obj, \0, *_)->('something', 1, 2); # \$obj->something(1, 2)``````

## Argument Semantics

``````        sub incr{ \$_[0]++ }

my \$i = 0;
curry(\&incr, \0)->(\$i); # \$i++
curry(\&incr, *_)->(\$i); # \$i++
curry(\&incr, \$i)->();   # \$i++``````