簡體   English   中英

為什么Option [Try [_]]不符合F [_]?

[英]Why does Option[Try[_]] not conform to F[_]?

所以有這樣的事情:

@ trait IntWrapper[F[_]] { def apply(i: Int): F[Int] }
defined trait IntWrapper

@ class OptWrapper extends IntWrapper[Option] { def apply(i: Int) = Option(i) }
defined class OptWrapper

我現在想做這樣的事情:

@ class TryOptWrapper extends IntWrapper[Try[Option]] { def apply(i: Int) = Try(Option(i)) }
cmd19.sc:1: scala.util.Try[Option] takes no type parameters, expected: one
class TryOptWrapper extends IntWrapper[Try[Option]] { def apply(i: Int) = Try(Option(i)) }
                                       ^
Compilation Failed

(如果我在class TryOptWrapper extends IntWrapper[Try[Option[_]]]聲明了特征擴展,則與此相同)

現在,也許最有趣的是,這可行:

@ type Topt[T] = Try[Option[T]]

@ class ToptWrapper extends IntWrapper[Topt] { def apply(i: Int) = Try(Option(i)) }
defined class ToptWrapper

現在,是否可以做同樣的事情-即使用類型參數為嵌套參數化類型的類型參數實現特征-而無需顯式聲明類型別名? 確實感覺就像我在這里缺少一些語法。

Try期望類型*類型參數,而Option具有類型* => *因此您不能編寫Try[Option] ,只能編寫Try[Option[Int]]Try[Option[String]]Try[Option[_]] ...

嘗試輸入lambda

class TryOptWrapper extends IntWrapper[({ type λ[A] = Try[Option[A]] })#λ] { def apply(i: Int) = Try(Option(i)) }

或帶投影儀

class TryOptWrapper extends IntWrapper[Lambda[A => Try[Option[A]]]] { def apply(i: Int) = Try(Option(i)) }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM