ListモナドとMaybeモナドに続いて、今日はIOモナドのお勉強をしてみます。 簡単な解説 IOモナドは実質的にStateモナドなので、こちらとかこちらとかを読んで下さい。 ただし、状態は「世界」となります。世界によって値は異なり、新しい世界(副作用が施された世界)を返します。 実装 Stateモナドと同じ定義をしました。 my $io_monad = Monad->new( T_arrow => sub { my $arrow = shift; # A -> B return sub { # TA -> TB my $tx = shift; # TA return sub { # TB my $world = shift; my ($value, $new_world) = $tx->($world); return $arrow->($value), $new_world; }; }