Scala GADT Skolem Playframework 2.1编译错误。

Scala GADT Skolem Playframework 2.1编译错误。,scala,playframework,playframework-2.1,Scala,Playframework,Playframework 2.1,有人有处理这些类型编译错误的经验吗 case class BasicAuthRequest[A](account: Account, request: Request[A]) extends WrappedRequest(request) { def asOpt[T](implicit fjs: Reads[T]): Option[T] = { catching(classOf[RuntimeException]).opt(fjs.reads(JsNull)).filte

有人有处理这些类型编译错误的经验吗

case class BasicAuthRequest[A](account: Account, request: Request[A]) extends WrappedRequest(request) {
    def asOpt[T](implicit fjs: Reads[T]): Option[T] = {
        catching(classOf[RuntimeException]).opt(fjs.reads(JsNull)).filter {
        case JsUndefined(_) => false
        case _ => true
    } }
}
我在尝试编译这个playframework方法时,从scala编译器得到了这个响应

[error]  found   : play.api.libs.json.JsUndefined
[error]  required: play.api.libs.json.JsResult[?T1] where type ?T1 <: T (this is a GADT skolem)
[error]         case JsUndefined(_) => false
[error]              ^
[error] one error found
[error] (compile:compile) Compilation failed
[error] Total time: 23 s, completed Nov 27, 2012 3:01:20 AM

fjs.readsjsnll返回JsResult[T],然后opt将其包装到选项中

因此,该代码存在两个问题:

返回类型应为选项[JsResult[T]] JsUndefined不是JsResult的子类,所以不能在match中使用它 编译器错误消息确实很神秘,您介意向scala tracker提交一个问题吗? 这是我认为您试图实现的代码

  case class Account()

  case class BasicAuthRequest[A](account: Account, request: Request[A]) extends WrappedRequest(request) {
    def asOpt[T](implicit fjs: Reads[T]): Option[T] =
      scala.util.control.Exception.catching(classOf[RuntimeException]).opt(fjs.reads(JsNull)).flatMap(_.asOpt)
  }