@Test public void optionAndStream() { Function<Integer, Integer> add2 = i -> i + 2; Function<StreamT<Integer>, StreamT<Integer>> optTAdd2 = StreamT.lift(add2); Stream<Integer> nums = Stream.of(1, 2); AnyM<Stream<Integer>> stream = AnyM.fromOptional(Optional.of(nums)); List<Integer> results = optTAdd2 .apply(StreamT.of(stream)) .unwrap() .<Optional<Stream<Integer>>>unwrap() .get() .collect(Collectors.toList()); assertThat(results, equalTo(Arrays.asList(3, 4))); }