2

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? interpreterすべての仕事をする上での実装ではありませんか? sのことを忘れることはできませんStreamか?

ここで実際に使用する方法はFree

4

0 に答える 0