pakoito
01/09/2020, 8:50 PMApplicative.map
into an Either or an OptionMichael Marth
01/09/2020, 11:10 PMpakoito
01/09/2020, 11:29 PMpakoito
01/09/2020, 11:30 PMpakoito
01/09/2020, 11:35 PMfun validate(ioA: IO<Int>, ioB: IO<String>): IO<Unit> =
map(ioA, ioB) { a, b ->
val vb = isValid(b)
when(val va = isValid(a)) {
true -> when (vb) {
true -> nextStep(a + b)
false -> validate(just(a), ioB) // wrong
}
false -> when (vb) {
true -> validate(ioA, just(b)) // wrong
false -> validate(ioA, ioB)
}
}
}
pakoito
01/09/2020, 11:35 PMpakoito
01/09/2020, 11:36 PMpakoito
01/09/2020, 11:36 PMvalidate(mVarA.take(), mVarB.take())
to start itpakoito
01/09/2020, 11:43 PMpakoito
01/09/2020, 11:44 PMpakoito
01/09/2020, 11:44 PMjust
pakoito
01/09/2020, 11:47 PMcombineLatest
, so what we’re doing here is reproducing it’s behaviorpakoito
01/09/2020, 11:50 PMfun Concurrent<ForIO>.pollNextTickOnTimeout(curr: A, next: IO<A>): IO<A> =
IO.schedulers().default().raceN(
Timer(this)
.sleep(100.milliseconds)
.flatMap { just(a) },
next
)
pakoito
01/09/2020, 11:50 PMpakoito
01/09/2020, 11:51 PMfun Concurrent<ForIO>.validate(ioA: IO<Int>, ioB: IO<String>): IO<Unit> =
map(ioA, ioB) { a, b ->
val vb = isValid(b)
when(val va = isValid(a)) {
true -> when (vb) {
true -> nextStep(a + b)
false -> validate(pollNextTickOnTimeout(a, ioA), ioB)
}
false -> when (vb) {
true -> validate(ioA, pollNextTickOnTimeout(b))
false -> validate(ioA, ioB)
}
}
}
julian
01/10/2020, 3:24 AMioB
?
validate(ioA, pollNextTickOnTimeout(b, ioB))
Michael Marth
01/10/2020, 11:22 AM