先に言っときますが、決して役に立つエントリではないので圏論やコルーチンみたいなものに興味がある人だけどうぞw PythonにおけるHaskellチックなdo記法をジェネレータで実装する方法に心惹かれたので、Perlで真似してみました。 ジェネレータはコルーチン的な振る舞いをするので、PerlではCoroを使うと楽でしょう。以前のエントリで作ったMaybeモナド*1を利用して、以下のようなシンタックスシュガーを作ってみます。 my $may_div = sub { my ($x, $y) = @_; return $y ? just($x / $y) : nothing; }; my $maybe_divs = do_monad { my $v1 = retrieve $may_div->(3.0, 1.0); my $v2 = retrieve $may_div->(2.0, 1.0);