Derek Berner
03/05/2019, 4:02 PMDerek Berner
03/05/2019, 4:02 PMparMapN
raulraja
03/05/2019, 4:04 PMCoroutineContext
. You can also try it directly over IO
which is in arrow-effects
. Concurrent also has other race style combinators like racePair and raceTripleDerek Berner
03/05/2019, 4:07 PMraulraja
03/05/2019, 4:09 PMraulraja
03/05/2019, 4:15 PMJannis
03/05/2019, 4:18 PMsam
03/05/2019, 5:21 PMsitepodmatt
03/06/2019, 3:45 AMdata class User(val id: Int) {
companion object
}
interface Eq<F> {
fun F.eqv(b: F): Boolean
fun F.neqv(b: F): Boolean =
!eqv(b)
}
@extension
interface UserEq: Eq<User> {
override fun User.eqv(b: User): Boolean = id == b.id
}
class ArrowExperiments : StringSpec({
"arrow experimenting" {
val u1 = User(1)
val u2 = User(1)
//u1.eqv(u2)?
}
})
sitepodmatt
03/06/2019, 3:45 AMjacob
03/06/2019, 3:50 AMjacob
03/06/2019, 3:50 AMsitepodmatt
03/06/2019, 3:59 AMjacob
03/06/2019, 3:59 AMsitepodmatt
03/06/2019, 3:59 AMsitepodmatt
03/06/2019, 3:59 AMjacob
03/06/2019, 4:03 AMjacob
03/06/2019, 4:20 AMnkhalasi
03/06/2019, 4:26 AMjacob
03/06/2019, 4:28 AMjacob
03/06/2019, 4:28 AMjacob
03/06/2019, 4:29 AMjacob
03/06/2019, 4:29 AMnkhalasi
03/06/2019, 4:32 AMjacob
03/06/2019, 4:33 AMsitepodmatt
03/06/2019, 4:33 AMsitepodmatt
03/06/2019, 4:34 AMjacob
03/06/2019, 4:35 AMnkhalasi
03/06/2019, 4:38 AMeq()
is generated for your User
class (User.eq()
), the code won't compile. So while its not very clear in the documentation, I found that kaptKotlin
is an pre-requisite for being able to use the required/expected extension methods.sitepodmatt
03/06/2019, 5:34 AMpackage personal.user.eq
import kotlin.Boolean
import kotlin.Suppress
import kotlin.jvm.JvmName
import personal.User
import personal.User.Companion
import personal.UserEq
@JvmName("neqv")
@Suppress(
"UNCHECKED_CAST",
"USELESS_CAST",
"EXTENSION_SHADOWED_BY_MEMBER",
"UNUSED_PARAMETER"
)
fun User.neqv(arg1: User): Boolean = personal.User.eq().run {
this@neqv.neqv(arg1) as kotlin.Boolean
}
fun Companion.eq(): UserEq = object : personal.UserEq { }