Scala依赖产品没有毫无意义的演员阵容

时间:2016-03-21 21:09:06

标签: scala dependent-type

我以下列方式使用路径依赖类型:

trait Schema {
  type Repr
}

trait Mapping[A] {
  val schema: Schema
  def reify(repr: schema.Repr): A
  def reflect(value: A): schema.Repr
}

object Mapping {
  implicit def trivialMapping(s: Schema): Mapping[s.Repr] = new Mapping[s.Repr] {
    override final val schema: Schema = s
    override def reify(repr: schema.Repr): s.Repr = repr.asInstanceOf[s.Repr]
    override def reflect(value: s.Repr): schema.Repr = value.asInstanceOf[schema.Repr]
  }
}

注意执行reify和反射中的asInstanceOf。我相信这些都是毫无意义的,因为"架构"总是等于" s"。有没有惯用的方法来实现这种模式,没有类型转换?第二个问题:是否存在任何微妙的原因" s"可能是不同的"架构"还是scalac对价值平等一无所知?

1 个答案:

答案 0 :(得分:4)

问题在于这一行:

SlidingAnimator

override final val schema: Schema = s 过于笼统,有一个抽象的Schema。 要么给它单Repr类型,要么提供一个类型细化,指定sRepr