Writer和Reader

本文介绍了Scala中Writer和Reader Monad的概念与用法。Writer Monad用于将附加一个Monoid到值上,通过MonadTell实现类型指定的追加操作。而Reader Monad作为Function Monad的实例,用于传递同一输入源给不同接收方。
摘要由CSDN通过智能技术生成

这两个monad是值得学习和使用的(尤其是Reader)

 

1.

Writer这个monad是将附加一个monoid到指定的一个值,我们当且把他看作是其名字说的write的过程

 

最简单的Writer Monad

sealed trait WriterT[F[+_], +W, +A] { self =>
  val run: F[(W, A)]

  def written(implicit F: Functor[F]): F[W] =
    F.map(run)(_._1)
  def value(implicit F: Functor[F]): F[A] =
    F.map(run)(_._2)
}


scalaz是允许将monoid附加到所用的数据类型,其是通过隐式转换的,

final class WriterOps[A](self: A) {
  def set[W](w: W): Writer[W, A] = WriterT.writer(w -> self)

  def tell: Writer[A, Unit] = WriterT.tell(self)
}


例如

scala> "Hello World".tell
res70: scalaz.Writer[String,Unit] = WriterT((Hello World,()))

scala> 45.set("A NUM")
res71: scalaz.Writer[String,Int] = WriterT((A NUM,45))


这样只是创建,如果我们需要指定类型的Wr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值