暇ができたので、Haskellに入門して、自分の学習のためにJava Optionalではモナドをどう実装しているのかを考えてみました。 前提 モナド モナドは値をラップする箱と考えるとわかりやすいです。モナドっぽいJavaの実装例は、Optional, Stream, CompletableFuture等。 いずれもオブジェクトをラップしている e.g. Optional<Integer>, Stream<Integer>, CompletableFuture<Integer> クラスがモナドであるためには、3つの必要条件(モナド則)を満たす必要があります。 またモナドはbindとretur…