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)