I'm implementing some expressions using Scala type system.
I have a function
def f[T](arg: Option[T]): T = ???
The type of the function is
type F[T] = Option[T] => T
and at runtime can be represented with PolyType
:
val tpe = weakTypeOf[F[_]].etaExpand // PolyType(T,Function1[Option[T],T])
Sometimes the valid argument can have one of the derived types: None
|_:Some[Int]
. (So the type is more precise).
I want to infer the result type of the function application to that argument f(arg): Int
.
For Option[Int]
it's more or less straight forward. For None
I found a way via typeSignatureIn(_)
. But I cannot figure out a simple way to guess that T=:= Int
in case of _:Some[Int]
.
Is there some type-inference helper methods in scala.reflect._
that can facilitate in solving this kind of problems?
Aucun commentaire:
Enregistrer un commentaire