foo
[gitmo/Moose-Autobox.git] / lib / Moose / Autobox / Code.pm
CommitLineData
5f654d8e 1package Moose::Autobox::Code;
2use Moose::Role 'with';
252ab1a2 3use autobox;
5f654d8e 4
5our $VERSION = '0.01';
6
7with 'Moose::Autobox::Ref';
8
9sub curry {
10 my ($f, @a) = @_;
11 return sub { $f->(@a, @_) }
12}
13
14sub rcurry {
15 my ($f, @a) = @_;
16 return sub { $f->(@_, @a) }
17}
18
19sub compose {
20 my ($f, $f2, @rest) = @_;
21 return $f if !$f2;
22 return (sub { $f2->($f->(@_)) })->compose(@rest);
23}
24
25sub disjoin {
26 my ($f, $f2) = @_;
27 return sub { $f->(@_) || $f2->(@_) }
28}
29
30sub conjoin {
31 my ($f, $f2) = @_;
32 return sub { $f->(@_) && $f2->(@_) }
33}
34
31d40d73 351;
36
37__END__
38
39=pod
40
41=head1 NAME
42
43Moose::Autobox::Code - the Code role
44
45=head1 SYNOPOSIS
46
47 use Moose::Autobox;
48 use autobox;
49
50 my $adder = sub { $_[0] + $_[1] };
51
52 $add_2 = $adder->curry(2);
53
54 $add_2->(2); # returns 4
55
56=head1 DESCRIPTION
57
260cc81f 58=head1 METHODS
59
60=over 4
61
62=item B<meta>
63
64=item B<curry>
65
66=item B<rcurry>
67
68=item B<conjoin>
69
70=item B<disjoin>
71
72=item B<compose>
73
74=back
75
31d40d73 76=head1 BUGS
77
78All complex software has bugs lurking in it, and this module is no
79exception. If you find a bug please either email me, or add the bug
80to cpan-RT.
81
82=head1 AUTHOR
83
84Stevan Little E<lt>stevan@iinteractive.comE<gt>
85
86=head1 COPYRIGHT AND LICENSE
87
88Copyright 2006 by Infinity Interactive, Inc.
89
90L<http://www.iinteractive.com>
91
92This library is free software; you can redistribute it and/or modify
93it under the same terms as Perl itself.
94
95=cut