0

私は scalaz にかなり慣れていないので、さまざまな型をモナド変換子に変換する方法を見つけようとしています。

Intaを aOptionT[Future, Int]に、または にさえ変換しようとして困っていEitherT[Future, String, Int]ます。

を使用してこれを行う方法を説明するチュートリアル/SOの回答がたくさん見つかりましたpointが、何らかの理由でそれらをコンパイルできません。

たとえば、ここからのこのスニペット:

1.point[({ type L[x] = EitherT[Future, String, x] })#L]

エラー:(9, 9) タイプの証拠パラメーターの暗黙的な値が見つかりませんでしたscalaz.Applicative[[x]scalaz.EitherT[scala.concurrent.Future,String,x]]

もうひとつはScalaz Monad Transformersから

type Result[A] = OptionT[Future, A]
"".point[Result]

エラー:(8, 10) タイプの証拠パラメーターの暗黙的な値が見つかりませんでしたscalaz.Applicative[A$A35.this.Result]

これもうまくいくと思いますが、メソッドliftMはのメンバーではないと言っていますFuture[Int]

1.point[Future].liftM[OptionT]    //doesnt compile
1.point[List].liftM[OptionT]      //compiles

これらの例はすべて失敗しますがFuture、たとえばList. 現在、これが私にとって唯一の方法ですが、少し冗長です-point代わりに使用できるようにしたいと思っています:

OptionT(Future.successful(1.some))

これがコンパイルされないのはなぜですか?applicative/monad forFutureは最近のバージョンで scalaz から削除されましたか?

私はscala 2.11.7とscalaz 7.1.3を使用しています。価値のあるものとして、これらは私の輸入品です:

import scala.concurrent.Future
import scalaz._
import Scalaz._
4

1 に答える 1