首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从作者[ W,A]创建WriterT[F,W,A]

从作者[ W,A]创建WriterT[F,W,A]
EN

Stack Overflow用户
提问于 2016-02-12 12:05:40
回答 1查看 313关注 0票数 2

在Scalaz中,是否有一种简单的方法可以将Writer[W, A]的实例(它是WriterT[Id, W, A])的别名)转换为WriterT[F, W, A]

我正在寻找类似于optionT函数与point相结合的东西,但是寻找作者:

例如。

代码语言:javascript
复制
// Similar situation, but using OptionT
val opt:  Option[String] = Some("log")
val optT: OptionT[IO, String] = optionT(opt.point[IO])

// Case in hand, using WriterT
val w:  Writer[String, Unit] = "log".tell
val wt: WriterT[IO, String, Unit] = ???

// Similar scenario
val w:  Writer[String, Int] = 3.set("log")
val wt: WriterT[IO, String, Int] = ???
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-12 15:34:14

一些一元类型的lift方法可以帮助进行这种操作:

代码语言:javascript
复制
import scalaz._, Scalaz._, effect.IO

val stateIO: StateT[IO, Int, Unit] = put(10).lift[IO]

Writer没有,但是您可以使用WriterTHoist实例来完成相同的任务:

代码语言:javascript
复制
type StringWriter[F[_], A] = WriterT[F, String, A]

def fromId[F[_]: Applicative]: Id ~> F = new (Id ~> F) {
  def apply[A](a: A) = a.point[F]
}

val w:  Writer[String, Unit] = "log".tell
val wt: WriterT[IO, String, Unit] = Hoist[StringWriter].hoist(fromId[IO]).apply(w)

这不是很方便,但这是你必须习惯的工作时,单台变压器。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35362240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档