docs: @Override
      public final <B> IO<B> flatMap(Function<? super A, ? extends Monad<B, IO<?>>> f) {
          @SuppressWarnings("unchecked")
          IO<Object> source = (IO<Object>) this;
          @SuppressWarnings({"unchecked", "RedundantCast"})
          Function<Object, IO<Object>> flatMap = (Function<Object, IO<Object>>) (Object) f;
          return new Compose<>(source, Choice2.b(flatMap));
      }