foo
[gitmo/Moose-Autobox.git] / lib / Moose / Autobox / Code.pm
1 package Moose::Autobox::Code;
2 use Moose::Role 'with';
3
4 our $VERSION = '0.01';
5
6 with 'Moose::Autobox::Ref';
7
8 sub curry {
9     my ($f, @a) = @_;
10     return sub { $f->(@a, @_) }
11 }
12
13 sub rcurry {
14     my ($f, @a) = @_;
15     return sub { $f->(@_, @a) }
16 }
17
18 sub compose {
19         my ($f, $f2, @rest) = @_;
20     return $f if !$f2;
21     return (sub { $f2->($f->(@_)) })->compose(@rest);
22 }
23
24 sub disjoin {
25     my ($f, $f2) = @_;
26     return sub { $f->(@_) || $f2->(@_) }
27 }
28         
29 sub conjoin {
30         my ($f, $f2) = @_;
31         return sub { $f->(@_) && $f2->(@_) }    
32 }
33
34 1;