gpt4 book ai didi

scala - 从 `Some[A]` 到 `A`

转载 作者:行者123 更新时间:2023-12-04 17:54:33 27 4
gpt4 key购买 nike

有什么办法可以得到A的类型吗?来自 Some[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 Option 类型也可以这样做吗?

最佳答案

这是一个使用路径依赖类型从值中恢复类型的解决方案:

  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

您有一个接收不透明 A 的函数,但是您通过 IsOption[A] 恢复了它是一个选项和内部类型的事实。隐含的。

我很欣赏这不是您所要求的,而是当您使用此类依赖于类型的类型时。你需要有一个具体的值,你可以从中恢复一个类型。

关于scala - 从 `Some[A]` 到 `A`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43226016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com