[英]Pattern matching type mismatch error
我正在嘗試構造IO
類型, IO[File, String]
表示類似File操作的結果,該操作將返回String作為結果。 而且我有以下問題:
object testcase1 {
import scala.language.higherKinds
trait IO[-F[+_], +A]
case class Return[-F[+_], +A](value: A) extends IO[F, A]
def fn[F[+_], A](op: IO[F, A]): A = op match {
case Return(v) => v // <---- type mismatch error
}
}
type mismatch
found : v.type (with underlying type Any)
required: A
case Return(v) => v
^
我期望v
是A
型,我在這里錯過了嗎? 我懷疑這與+
和-
,但我看不到問題...
更詳細:我懷疑問題隱藏在類型差異中是因為, 如果在trait IO
+A
變為A
或-F
變為F
,則代碼可以正常編譯,例如:
object testcase1 {
import scala.language.higherKinds
trait IO[F[+_], +A] // note the missing "-" in front of F
case class Return[F[+_], +A](value: A) extends IO[F, A]
def fn[F[+_], A](op: IO[F, A]): A = op match {
case Return(v) => v // <---- compiles FINE!!
}
}
正如@igx所建議的那樣,使用v.asInstanceOf[A]
可以強制對其進行編譯,但是由於我在這里僅提出了一個最小化的問題,因此我必須在很多地方添加asInstanceOf
才能使其工作。
另外,我真的很想知道這個錯誤的原因~~
不能保證Return上的A類型與fn中的A相同。 如果您確定可以強制執行(但是我不確定您要執行的操作):
object testcase1 {
import scala.language.higherKinds
trait IO[-F[+_], +A]
case class Return[-F[+_], +A](value: A) extends IO[F, A]
def fn[F[+_], A](op: IO[F, A]): A = op match {
case Return(v) => v.asInstanceOf[A] // <---- OK
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.