use Syntax::Keyword::Junction, not Perl6::Junction
[gitmo/Moose-Autobox.git] / lib / Moose / Autobox / Array.pm
index 92b919b..4e7abd7 100644 (file)
@@ -1,9 +1,13 @@
 package Moose::Autobox::Array;
 use Moose::Role 'with';
-use Perl6::Junction;
 use Moose::Autobox;
 
-our $VERSION = '0.03';
+use Syntax::Keyword::Junction::All ();
+use Syntax::Keyword::Junction::Any ();
+use Syntax::Keyword::Junction::None ();
+use Syntax::Keyword::Junction::One ();
+
+our $VERSION = '0.12';
 
 with 'Moose::Autobox::Ref',
      'Moose::Autobox::List',
@@ -85,6 +89,14 @@ sub sort {
     [ CORE::sort { $sub->($a, $b) } @$array ]; 
 }    
 
+sub first {
+    $_[0]->[0];
+}
+
+sub last {
+    $_[0]->[$#{$_[0]}];
+}
+
 ## ::Indexed implementation
 
 sub at {
@@ -117,6 +129,36 @@ sub kv {
     $array->keys->map(sub { [ $_, $array->[$_] ] });
 }
 
+sub each {
+    my ($array, $sub) = @_;
+    for my $i (0 .. $#$array) {
+      $sub->($i, $array->[ $i ]);
+    }
+}
+
+sub each_key {
+    my ($array, $sub) = @_;
+    $sub->($_) for (0 .. $#$array);
+}
+
+sub each_value {
+    my ($array, $sub) = @_;
+    $sub->($_) for @$array;
+}
+
+sub each_n_values {
+    my ($array, $n, $sub) = @_;
+    my $it = List::MoreUtils::natatime($n, @$array);
+
+    while (my @vals = $it->()) {
+        $sub->(@vals);
+    }
+
+    return;
+}
+
+# end indexed
+
 sub flatten {
     @{$_[0]}
 }
@@ -143,22 +185,22 @@ sub flatten_deep {
 
 sub all {
     my ($array) = @_;     
-    return Perl6::Junction::all(@$array);
+    return Syntax::Keyword::Junction::All->new(@$array);
 }
 
 sub any {
     my ($array) = @_;     
-    return Perl6::Junction::any(@$array);
+    return Syntax::Keyword::Junction::Any->new(@$array);
 }
 
 sub none {
     my ($array) = @_;     
-    return Perl6::Junction::none(@$array);
+    return Syntax::Keyword::Junction::None->new(@$array);
 }
 
 sub one {
     my ($array) = @_; 
-    return Perl6::Junction::one(@$array);
+    return Syntax::Keyword::Junction::One->new(@$array);
 }
 
 ## Print
@@ -166,6 +208,8 @@ sub one {
 sub print { CORE::print @{$_[0]} }
 sub say   { CORE::print @{$_[0]}, "\n" }
 
+no Moose::Role;
+
 1;
 
 __END__
@@ -216,6 +260,10 @@ This is a role to describe operations on the Array type.
 
 =item B<flatten_deep ($depth)>
 
+=item B<first>
+
+=item B<last>
+
 =back
 
 =head2 Indexed implementation
@@ -234,6 +282,14 @@ This is a role to describe operations on the Array type.
 
 =item B<kv>
 
+=item B<each>
+
+=item B<each_key>
+
+=item B<each_value>
+
+=item B<each_n_values ($n, $callback)>
+
 =back
 
 =head2 List implementation