WriterT或ReaderWriterStateT?

时间:2018-06-26 10:51:16

标签: scala functional-programming scalaz scala-cats

我正在尝试将WriterT应用于我的案子,但遇到了一些问题。我根据需要有以下作家:

val writer: WriterT[Option, List[IO[Unit]],  Set[String]] = //

这很好。但是问题是在某些情况下我需要映射作者的价值。特别是我有一个功能

val f: String => Set[String] = //...

我尝试过:

import cats.instances.option._
writer.contramap(f)

但这失败并出现编译错误:

Error:(26, 39) could not find implicit value for parameter F: 
        cats.Contravariant[Option]

我找到了使用ReaderWriterStateT[Option, Set[String], List[IO[Unit]], Unit, Unit]的解决方法,以下内容(Kleisli::local不需要Contravariant):

val rws: ReaderWriterStateT[Option, Set[String], List[IO[Unit]], Unit, Unit] = //
rws.local(f)  //compiles

但是我认为它看起来很奇怪,而且很疯狂。实际上,我只需要WriterT的语义,而不需要读者。我们可以在这里工作WriterT吗?

0 个答案:

没有答案