use strict; use warnings; use Data::Monad::CondVar; use AnyEvent; use Test::More; sub filtered_cv($) { my $v = shift; my $cv = AE::cv; my $t; $t = AE::timer 0, 0, sub { $cv->($v); undef $t; }; return $cv->filter(sub { $_[0] > 2}); } is +(filtered_cv 3)->or(filtered_cv 1)->recv, 3; is +(filtered_cv 1)->or(filtered_cv 3)->recv, 3; is +(filtered_cv 10)->or(filtered_cv 5)->recv, 10; eval { (filtered_cv 1)->or(filtered_cv 1)->recv }; ok $@; done_testing;