diff --git a/src/main/java/com/jnape/palatable/lambda/semigroup/builtin/Absent.java b/src/main/java/com/jnape/palatable/lambda/semigroup/builtin/Absent.java index 68162ad7..222a5e7d 100644 --- a/src/main/java/com/jnape/palatable/lambda/semigroup/builtin/Absent.java +++ b/src/main/java/com/jnape/palatable/lambda/semigroup/builtin/Absent.java @@ -72,7 +72,7 @@ public Maybe checkedApply(Maybe maybeX, Maybe maybeY) { @Override public Maybe foldLeft(Maybe acc, Iterable> maybes) { return trampoline( - into((res, it) -> res.equals(nothing()) + into((res, it) -> res.equals(nothing()) || !it.hasNext() ? terminate(res) : recurse(tuple(liftA2(aSemigroup, res, it.next()), it))), tuple(acc, maybes.iterator())); diff --git a/src/test/java/com/jnape/palatable/lambda/semigroup/builtin/AbsentTest.java b/src/test/java/com/jnape/palatable/lambda/semigroup/builtin/AbsentTest.java index 5ab7b53f..9d3dc452 100644 --- a/src/test/java/com/jnape/palatable/lambda/semigroup/builtin/AbsentTest.java +++ b/src/test/java/com/jnape/palatable/lambda/semigroup/builtin/AbsentTest.java @@ -71,6 +71,13 @@ public void foldLeftShortCircuit() { assertEquals(nothing(), result); } + @Test + public void foldLeftWorksForJusts() { + Maybe result = Absent.absent(Constantly::constantly) + .foldLeft(just(UNIT), Arrays.asList(just(UNIT), just(UNIT))); + assertEquals(just(UNIT), result); + } + @Test(timeout = 200) public void checkedApplyFoldRightShortCircuit() { Maybe result = Absent.absent().checkedApply(Constantly::constantly)