如何在fs2中使用免费的蒸汽?

时间:2016-11-11 10:00:58

标签: scala functional-programming free-monad fs2

我想说我想从jms读取数据,将其映射到toUpperCase并发送到其他地方。所以我用Jms[A]对实际的消息系统进行抽象,对吧?

 trait Jms[A]    
 case object Pull extends Jms[String]    
 case class Push(s: String) extends Jms[Unit]

业务逻辑:

  def freeProcess(source: Stream[Jms, String], sink: Sink[Jms, String]): Free[Jms, Unit] =
    source.map(_.toUpperCase).through(sink).runFree

Free将被解释,所以就是这样:

 val interpreter = new ~>[Jms, Task] {
    def apply[A](f: Jms[A]): Task[A] = f match {
      case Pull => Task.now {
        /* await on socket;  toString */
        "incoming"
      }
      case Push(m: String) => Task.now {
        /* push to socket */
        ()
      }
    }
  }

但是,传递给freeProcess的是什么? 这些source / sink是什么? Aren在interpreter中完成所有工作的实现?那我不能忘记Stream吗?

如何在这里实际使用Free

0 个答案:

没有答案