[英]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.