2
我正在學習Monad Transformers,我正在學習如何嵌套Monads。使用Monads變壓器堆疊Monads
所以我們可以說我想爲了這個造型我也
type Error = String
type FutureEither = EitherT[Future, Error, A]
type FutureEitherOption = OptionT[FutureEither, A]
現在我做
val p1 = 1.pure[FutureEitherOption]
,我得到
OptionT(EitherT(Future(Success(Right(Some(1))))))
到模型,以便創建一個
Future[Either[String, Option[A]]]
所以這看起來是正確的。我在一個選項內有一個1,它位於未來成功的內部。好!
但如果我這樣做
Option.empty[Int].pure[FutureEitherOption]
我希望,我會得到Future(Success(Right(None)))
但我看到輸出
OptionT(EitherT(Future(Success(Right(Some(None))))))
而且,如果我想是這樣
Future(Success(Left("fail")))
如果我嘗試做
val p2 = Left("fail").pure[FutureEitherOption]
輸出是怪異
OptionT(EitherT(Future(Success(Right(Some(Left(fail)))))))
,因爲現在有兩個Eithers這不是我的造型都....