@@ -15,7 +15,7 @@ data class SequenceKW<out A> constructor(val sequence: Sequence<A>) : SequenceKW
15
15
fun <B > foldR (lb : Eval <B >, f : (A , Eval <B >) -> Eval <B >): Eval <B > {
16
16
fun loop (fa_p : SequenceKW <A >): Eval <B > = when {
17
17
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()) })
19
19
}
20
20
return Eval .defer { loop(this .ev()) }
21
21
}
@@ -38,28 +38,28 @@ data class SequenceKW<out A> constructor(val sequence: Sequence<A>) : SequenceKW
38
38
39
39
fun <A > empty (): SequenceKW <A > = emptySequence<A >().k()
40
40
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
+ }
57
59
}
58
60
}
59
61
}
60
- }
61
62
62
- fun <A , B > tailRecM (a : A , f : (A ) -> HK <SequenceKWHK , Either <A , B >>): SequenceKW <B > {
63
63
val buf = mutableListOf<B >()
64
64
go(buf, f, f(a).ev())
65
65
return SequenceKW (buf.asSequence())
0 commit comments