raulraja
08/20/2017, 8:12 PMinterface ByteBufferOps<A> {
fun fromByteBuffer(b: ByteBuffer): A
fun toByteBuffer(a: A): ByteBuffer
}
And you can declare instances like:
import kategory.*
object PersonToByteBuffer : ByteBufferOps<Person>, GlobalInstance<ByteBufferOps<Person>> {
fun fromByteBuffer(b: ByteBuffer): Person = TODO()
fun toByteBuffer(a: Person): ByteBuffer = TODO()
}
inline fun <reified A> byteBufferOps(): ByteBufferOps<A> = instance(InstanceParametrizedType(ByteBufferOps::class.java, listOf(A::class.java)))
then you can declare abstract polymorphic programs like so:
inline fun <reified A> serialize(a: A, BO: ByteBufferOps<A> = byteBufferOps()) = BO.toByteBuffer(a)
and when you are ready to make them concrete:
serialize(person)