our $VERSION = '0.01';
-with 'Moose::Autobox::Ref';
+with 'Moose::Autobox::Ref',
+ 'Moose::Autobox::List';
+## List interface
+
sub length {
my ($array) = @_;
CORE::scalar @$array;
sub reverse {
my ($array) = @_;
- [ CORE::reverse @{$array} ];
+ [ CORE::reverse @$array ];
}
sub sort {
my ($array, $sub) = @_;
$sub ||= sub { $a cmp $b };
[ CORE::sort { $sub->($a, $b) } @$array ];
+}
+
+# ...
+
+sub reduce {
+ my ($array, $func) = @_;
+ my @a = @$array;
+ my $acc = CORE::shift @a;
+ $acc = $func->($acc, $_) foreach @a;
+ return $acc;
+}
+
+sub zip {
+ my ($array, $other) = @_;
+ [
+ CORE::map {
+ [ $array->[$_], $other->[$_] ]
+ } 0 .. $#{(
+ CORE::scalar @{$array} < CORE::scalar @{$other}
+ ? $other : $array
+ )}
+ ];
+}
+
+##
+
+sub keys {
+ my ($array) = @_;
+ [ 0 .. $#{$array} ];
}
+sub values {
+ my ($array) = @_;
+ [ @$array ];
+}
+
+sub kv {
+ my ($array) = @_;
+ [ CORE::map { [ $_, $array->[$_] ] } (0 .. $#{$array}) ];
+}
+
+## Array Interface
+
sub pop {
my ($array) = @_;
- CORE::pop @{$array};
+ CORE::pop @$array;
}
sub push {
sub unshift {
my ($array, @rest) = @_;
- CORE::unshift @{$array}, @rest;
+ CORE::unshift @$array, @rest;
$array;
}
sub exists {
CORE::shift @$array;
}
+
1;