The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Data::Monad::List;
use Test::More;

sub eq_sets($$) {
    my ($sets1, $sets2) = @_;

    @$sets1 == @$sets2 or return;
    for my $set (@$sets1) {
        return unless grep {eq_array $set, $_} @$sets2;
    }

    return 1;
}

my $list = list_sequence(
    scalar_list(1, 2), scalar_list(3), scalar_list(4, 5, 6)
);

ok eq_sets(
    $list,
    [[1, 3, 4], [1 ,3, 5], [1, 3, 6], [2, 3, 4], [2, 3, 5], [2, 3, 6]]
);

# check types
isa_ok $list => 'Data::Monad::List';
is ref $list->[0], 'ARRAY';

done_testing;