dca*_*tro 0 scala scalaz scalaz7
我对scalaz很新,我正试图将各种类型转换为monad变换器.
我坚持试图将a转换Int为a OptionT[Future, Int],甚至转换为EitherT[Future, String, Int].
我发现了一堆教程/ SO答案,解释了如何使用它point,但由于某种原因我无法编译它们.
例如,该段从这里:
1.point[({ type L[x] = EitherT[Future, String, x] })#L]
Run Code Online (Sandbox Code Playgroud)
错误:(9,9)找不到类型的证据参数的隐含值
scalaz.Applicative[[x]scalaz.EitherT[scala.concurrent.Future,String,x]]
另一个来自Scalaz Monad变形金刚
type Result[A] = OptionT[Future, A]
"".point[Result]
Run Code Online (Sandbox Code Playgroud)
错误:(8,10)找不到类型的证据参数的隐含值
scalaz.Applicative[A$A35.this.Result]
我相信这个应该也可以,但它说方法liftM不是以下成员Future[Int]:
1.point[Future].liftM[OptionT] //doesnt compile
1.point[List].liftM[OptionT] //compiles
Run Code Online (Sandbox Code Playgroud)
所有这些示例都失败了,但是如果我替换Future,比如说,它们会编译List.现在,这是对我有用的唯一方式,但它有点冗长 - 我真的希望能够使用point:
OptionT(Future.successful(1.some))
Run Code Online (Sandbox Code Playgroud)
为什么这不编译?Future在最近的版本中,应用/ monad是否已从scalaz中移除?
我正在使用scala 2.11.7和scalaz 7.1.3.对于它的价值,这些是我的进口:
import scala.concurrent.Future
import scalaz._
import Scalaz._
Run Code Online (Sandbox Code Playgroud)
导入一个ExecutionContext将使您的解决方案编译,请参阅scalaz.std.scalaFuture.
import scala.concurrent.ExecutionContext.Implicits.global
type Result[A] = OptionT[Future, A]
"".point[Result]
// Result[String] = OptionT(scala.concurrent.impl.Promise$DefaultPromise@5e155fc)
1.point[Future].liftM[OptionT]
// scalaz.OptionT[scala.concurrent.Future,Int] = OptionT(scala.concurrent.impl.Promise$DefaultPromise@60821af9)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |