Skip to content

Commit c699aa2

Browse files
committed
Clean up SequenceKW
make `go` an inner fun of `tailRecM` and improve foldR implementaion
1 parent e674b2e commit c699aa2

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

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

+19-19
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ data class SequenceKW<out A> constructor(val sequence: Sequence<A>) : SequenceKW
1515
fun <B> foldR(lb: Eval<B>, f: (A, Eval<B>) -> Eval<B>): Eval<B> {
1616
fun loop(fa_p: SequenceKW<A>): Eval<B> = when {
1717
fa_p.sequence.none() -> lb
18-
else -> f(fa_p.ev().sequence.first(), Eval.defer { loop(fa_p.sequence.drop(1).k()) })
18+
else -> f(fa_p.first(), Eval.defer { loop(fa_p.drop(1).k()) })
1919
}
2020
return Eval.defer { loop(this.ev()) }
2121
}
@@ -38,28 +38,28 @@ data class SequenceKW<out A> constructor(val sequence: Sequence<A>) : SequenceKW
3838

3939
fun <A> empty(): SequenceKW<A> = emptySequence<A>().k()
4040

41-
private tailrec fun <A, B> go(
42-
buf: MutableList<B>,
43-
f: (A) -> HK<SequenceKWHK, Either<A, B>>,
44-
v: SequenceKW<Either<A, B>>) {
45-
if (!v.isEmpty()) {
46-
val head: Either<A, B> = v.first()
47-
when (head) {
48-
is Either.Right<A, B> -> {
49-
buf += head.b
50-
go(buf, f, v.drop(1).k())
51-
}
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())
41+
fun <A, B> tailRecM(a: A, f: (A) -> HK<SequenceKWHK, Either<A, B>>): SequenceKW<B> {
42+
tailrec fun <A, B> go(
43+
buf: MutableList<B>,
44+
f: (A) -> HK<SequenceKWHK, Either<A, B>>,
45+
v: SequenceKW<Either<A, B>>) {
46+
if (!v.isEmpty()) {
47+
val head: Either<A, B> = v.first()
48+
when (head) {
49+
is Either.Right<A, B> -> {
50+
buf += head.b
51+
go(buf, f, v.drop(1).k())
52+
}
53+
is Either.Left<A, B> -> {
54+
if (v.count() == 1)
55+
go(buf, f, (f(head.a).ev()).k())
56+
else
57+
go(buf, f, (f(head.a).ev() + v.drop(1)).k())
58+
}
5759
}
5860
}
5961
}
60-
}
6162

62-
fun <A, B> tailRecM(a: A, f: (A) -> HK<SequenceKWHK, Either<A, B>>): SequenceKW<B> {
6363
val buf = mutableListOf<B>()
6464
go(buf, f, f(a).ev())
6565
return SequenceKW(buf.asSequence())

0 commit comments

Comments
 (0)