```sealed class LeafValue<A> class LStr(val ...
# arrow
j
Copy code
sealed class LeafValue<A>
class LStr(val s: String): LeafValue<String>()
class LNum(val n: Number): LeafValue<Number>()
class LList<A>(val l: List<A>): LeafValue<List<A>>()

fun <A> eval(v: LeafValue<A>): A {
    return when (v) {
        is LStr -> v.s as A
        is LNum -> v.n as A
        is LList<*> -> v.l as A
    }
}