use strict; use warnings; use Data::Monad::Maybe qw/just nothing/; use Data::Monad::Base::Sugar; use Test::More; my $data = just { hage => { debu => { me => 1 } } }; sub get_key($) { my ($key) = @_; sub { my $data = shift; return nothing unless ref $data eq 'HASH'; exists $data->{$key} ? just $data->{$key} : nothing; }; } { my $maybe = $data->flat_map(get_key 'hage') ->flat_map(get_key 'debu') ->flat_map(get_key 'me'); ok ! $maybe->is_nothing; is $maybe->value, 1; } { my $maybe = $data->flat_map(get_key 'hage') ->flat_map(get_key 'yase') ->flat_map(get_key 'me'); ok $maybe->is_nothing; } { ok just(1, 2, 3)->flat_map(sub { is_deeply [@_], [1, 2, 3]; nothing; })->map(sub { "DUMMY" })->is_nothing; } { ok +Data::Monad::Maybe->zero->is_nothing; ok +Data::Monad::Maybe->zero->flat_map(sub { just 1 })->is_nothing; ok just(1)->flat_map(sub { Data::Monad::Maybe->zero })->is_nothing; } { ok Data::Monad::Base::Sugar::for { pick \my $just => sub { just 1 }; satisfy { $just >= 10 }; yield { $just }; }->is_nothing; is Data::Monad::Base::Sugar::for { pick \my $just => sub { just 15 }; satisfy { $just >= 10 }; yield { $just }; }->value, 15; } done_testing;