package scalaz.example

object ExampleLogger {
  import scalaz._, Scalaz._

  def main(args: Array[String]) {
    case class Person(name: String, age: Int)

    val a = 7
    val b = "hello"
    val c = Person("Bob", 45)
    val d = a + 100
    val e = b.reverse
    val f = c copy (age = c.age * 10)

    val r =
      (for {
        aa <- a.logger[String] :->> ("starting off with " + _)
        bb <- b.logger[String] :+-> "saying hello"
        cc <- "Hi Bob" <-+: "Creating a person" <-+: c.logger[String]
        dd <- d.logger[String] :+-> "adding a hundred"
      } yield dd) printFlushEachLog

    val s =
        for {
          rr <- r
          ee <- e.logger[String] :+-> "reversing"
          ff <- f.logger[String] :->> ("make Bob a bit older " + _)
        } yield (rr, ff)


    println("FINAL LOG")
    s.printEachLog
  }
}