Scalaz 7.x

ZIO 实例

如果您是 Scalaz 7.2 的忠实用户,那么 interop-scala7x 模块为它的几种类型类提供了 ZIO 支持,请查看源代码以获取更多详细信息。

例子

import scalaz._, Scalaz._
import zio.interop.scalaz72._

type Database = IList[User]

def findUser(id: UserId): ZIO[Database, UserError, User] = ...
def findUsers(ids: IList[UserId]): ZIO[Database, UserError, IList[User]] = ids.traverse(findUser(_))

通过 ZIO 并行执行 Applicative 实例

由于 ApplicativeMonad 相关的法则,ZIO 的 Applicative 实例必须通过 bind 来获得,因此组合多个 Applicative effect 时将只能串行获得。为了解除这个限制,ZIO 通过非 Monad 的标记(Tag)来并行执行 Applicative 实例。

例子

import scalaz._, Scalaz._
import zio.interop.scalaz72._

case class Dashboard(details: UserDetails, history: TransactionHistory)

def getDetails(id: UserId): ZIO[Database, UserError, UserDetails] = ...
def getHistory(id: UserId): ZIO[Database, UserError, TransactionHistory] = ...

def buildDashboard(id: UserId): ZIO[Database, UserError, Dashboard] =
  Tag.unwrap(^(par(getDetails(id)), par(getHistory(id)))(Dashboard.apply))

def par[R, E, A](io: ZIO[R, E, A]): scalaz72.ParIO[R, E, A] = Tag(io)
Leave a Reply
Your email address will not be published.
*
*

BACK TO TOP