这两个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