A
のタイプになる方法はありますかSome[A]
からですか?`` [A] `から` A`に移動
type X = Some[Int]
type Y = ??? // what do I have to write here to get `Int`
私はこれを可能に私自身のOption
型定義することができます。
sealed trait Option[+A]
case object None extends Option[Nothing]
case class Some[+A](a: A) {
type Inner = A
}
をしてから
type X = Some[Int]
type Y = X#Inner
を使用するが、これは通常のScalaのオプションタイプで何とかも可能ですか?答えは重く華麗なプレゼンテーションのこのスライドからインスピレーションを得ている
trait IsOption[F]{
type T
def apply(f: F): Option[T]
}
object IsOption{
def apply[F](implicit isf: IsOption[F]) = isf
implicit def mk[A] = new IsOption[Option[A]]{
type T = A
def apply(f: Option[A]): Option[A] = f
}
}
def getInner[A](in:A)(implicit inner: IsOption[A]): Option[inner.T] = inner(in)
:http://wheaties.github.io/Presentations/Scala-Dep-Types/dependent-types.html#/2/1
あなたは受信機能を持ってここに
それがhttpsのことを思い出す:// stackoverflow.com/questions/29038214/why-scala-does-not-have-a-decltypeとhttps://stackoverflow.com/questions/29034921/can-function-type-be-defined-by-inference – Suma
私は思います一般的に、これは可能ではないかもしれませんが、あなたのユースケースに応じて 'def x [T](opt:Option [T]){/ * Tはここで利用可能です* /}'またはパスに依存するty pe。 –