sam
06/06/2019, 7:14 PMimplicit Fibble[T]
simon.vergauwen
06/06/2019, 7:27 PMimplicit
in Kotlin, this is why all typeclass constraints are regular parameters. Hopefully with KEEP-87 that would change, more on KEEP-87 here https://github.com/Kotlin/KEEP/pull/87.sam
06/06/2019, 7:27 PMsimon.vergauwen
06/06/2019, 7:27 PMFibble
have? And what is your use-case?sam
06/06/2019, 7:27 PMsam
06/06/2019, 7:28 PMsealed class Foo {
object A : Foo()
object B: Foo()
}
sam
06/06/2019, 7:28 PMinterface MyTypeclass<T> { fun doit(t : T) }
sam
06/06/2019, 7:28 PMtypeClassInstance.doit(someT)
simon.vergauwen
06/06/2019, 7:30 PMsam
06/06/2019, 7:30 PMError
and in a particular case I want to marshall these errors back over HTTP. So I want a typeclass HandleError
or whatever I call it, and move the logic for SubscriptionInvalidError
or whatever errors I have handled per typeclass.simon.vergauwen
06/06/2019, 7:30 PMwhen
?sam
06/06/2019, 7:30 PMsam
06/06/2019, 7:31 PMwhen
is what I'm doing atmsimon.vergauwen
06/06/2019, 7:31 PMsimon.vergauwen
06/06/2019, 7:31 PMsam
06/06/2019, 7:31 PMwhen (t) { is SubscriptionInvalidError -> SubscriptionInvalidErrorHandler.doit(t) }
simon.vergauwen
06/06/2019, 7:31 PMsam
06/06/2019, 7:31 PMsam
06/06/2019, 7:32 PMsimon.vergauwen
06/06/2019, 7:32 PMsam
06/06/2019, 7:33 PMsimon.vergauwen
06/06/2019, 7:34 PMsimon.vergauwen
06/06/2019, 7:34 PMsam
06/06/2019, 7:34 PMsam
06/06/2019, 7:35 PMsimon.vergauwen
06/06/2019, 7:39 PM@autofold
if you use arrow-meta
, move the methods to seperate files.
//DoItA.kt
fun DoItA(a: A)
//DoItB.kt
fun DoItB(b: B)
//ADT.kt
@autofold sealed class Foo {
fun doIt() = fold(::DoItA, ::DoItB)
object A : Foo()
object B: Foo()
}
simon.vergauwen
06/06/2019, 7:40 PMsam
06/06/2019, 7:40 PMsimon.vergauwen
06/06/2019, 7:40 PMsam
06/06/2019, 7:40 PMsimon.vergauwen
06/06/2019, 7:40 PMsam
06/06/2019, 7:40 PMsimon.vergauwen
06/06/2019, 7:40 PM@autofold
sam
06/06/2019, 7:40 PMsimon.vergauwen
06/06/2019, 7:40 PMfold
method as an extension function to your ADT.sam
06/06/2019, 7:41 PMsimon.vergauwen
06/06/2019, 7:41 PMwhen
.sam
06/06/2019, 7:41 PMsimon.vergauwen
06/06/2019, 7:41 PMsam
06/06/2019, 7:42 PMsam
06/06/2019, 7:42 PMsam
06/06/2019, 7:42 PMsimon.vergauwen
06/06/2019, 7:44 PMsimon.vergauwen
06/06/2019, 7:44 PMsam
06/06/2019, 7:44 PMsam
06/06/2019, 7:47 PMsam
06/06/2019, 7:48 PMsimon.vergauwen
06/06/2019, 7:55 PMsam
06/06/2019, 7:55 PMsimon.vergauwen
06/06/2019, 7:55 PMsam
06/06/2019, 7:56 PMsimon.vergauwen
06/06/2019, 7:56 PM