def selectIdFromDb(): Writer[List[String], Int] = for {
_ <- Writer.tell(List("db access start."))
_ <- Writer.tell(List("TODO: db access 実装"))
r <- Writer.value[List[String], Int](1)
_ <- Writer.tell(List("db access end."))
} yield r
def getInfoFromApiById(id: Int): Writer[List[String], String] = for {
_ <- Writer.tell(List("db access start."))
_ <- Writer.tell(List("TODO: api access 実装"))
r <- Writer.value[List[String], String](s"api info. id=[$id]")
_ <- Writer.tell(List("db access end."))
} yield r
val result = for {
id <- selectIdFromDb()
info <- getInfoFromApiById(id)
} yield info
val (logs, infoResult) = result.run
logs.foreach(println)
println(infoResult)