jacob
03/13/2019, 10:35 PMsealed 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
}
}