WriterT или ReaderWriterStateT? - PullRequest
       23

WriterT или ReaderWriterStateT?

0 голосов
/ 26 июня 2018

Я пытаюсь применить 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 работать здесь?

...