Skip to content

Commit e674b2e

Browse files
committed
Fix Sequence tailRecM StackOverflow
1 parent 0a8deae commit e674b2e

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

kategory/src/main/kotlin/kategory/data/SequenceKW.kt

+6-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,12 @@ data class SequenceKW<out A> constructor(val sequence: Sequence<A>) : SequenceKW
4949
buf += head.b
5050
go(buf, f, v.drop(1).k())
5151
}
52-
is Either.Left<A, B> -> go(buf, f, (f(head.a).ev() + v.drop(1)).k())
52+
is Either.Left<A, B> -> {
53+
if (v.count() == 1)
54+
go(buf, f, (f(head.a).ev()).k())
55+
else
56+
go(buf, f, (f(head.a).ev() + v.drop(1)).k())
57+
}
5358
}
5459
}
5560
}

kategory/src/test/kotlin/kategory/data/SequenceKWTest.kt

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class SequenceKWTest : UnitSpec() {
1414
a.toList() == b.toList()
1515
}
1616

17+
testLaws(MonadLaws.laws(SequenceKW.monad(), eq))
1718
testLaws(MonoidKLaws.laws(SequenceKW.monoidK(), applicative, eq))
1819
testLaws(TraverseLaws.laws(SequenceKW.traverse(), applicative, { n: Int -> SequenceKW(sequenceOf(n)) }, eq))
1920
}

0 commit comments

Comments
 (0)