From b2e21182d3d62705235ec95cd546c6285c0d2cec Mon Sep 17 00:00:00 2001 From: Mark Canlas Date: Sun, 4 Dec 2022 13:26:52 -0500 Subject: [PATCH] two line demo --- data/one-line.txt | 1 + data/two-lines.txt | 2 ++ .../com/htmlism/firepower/demo/Line.scala | 10 ++++++++ .../firepower/demo/PrintPrograms.scala | 23 +++++++++++++------ 4 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 data/one-line.txt create mode 100644 data/two-lines.txt create mode 100644 firepower-demo/src/main/scala/com/htmlism/firepower/demo/Line.scala diff --git a/data/one-line.txt b/data/one-line.txt new file mode 100644 index 0000000..e3c0674 --- /dev/null +++ b/data/one-line.txt @@ -0,0 +1 @@ +one line diff --git a/data/two-lines.txt b/data/two-lines.txt new file mode 100644 index 0000000..3bd1f0e --- /dev/null +++ b/data/two-lines.txt @@ -0,0 +1,2 @@ +foo +bar diff --git a/firepower-demo/src/main/scala/com/htmlism/firepower/demo/Line.scala b/firepower-demo/src/main/scala/com/htmlism/firepower/demo/Line.scala new file mode 100644 index 0000000..3db8977 --- /dev/null +++ b/firepower-demo/src/main/scala/com/htmlism/firepower/demo/Line.scala @@ -0,0 +1,10 @@ +package com.htmlism.firepower.demo + +case class Line(s: String) + +object Line: + def mkString(xs: List[Line]): String = + xs + .iterator + .map(_.s) + .mkString("\n") diff --git a/firepower-demo/src/main/scala/com/htmlism/firepower/demo/PrintPrograms.scala b/firepower-demo/src/main/scala/com/htmlism/firepower/demo/PrintPrograms.scala index 1151277..ed2277d 100644 --- a/firepower-demo/src/main/scala/com/htmlism/firepower/demo/PrintPrograms.scala +++ b/firepower-demo/src/main/scala/com/htmlism/firepower/demo/PrintPrograms.scala @@ -7,12 +7,21 @@ import java.io.IOException import com.htmlism.rufio.withzio._ object PrintPrograms extends ZIOAppDefault: - def run: ZIO[Any, Throwable, Unit] = - for { - _ <- File("data/out.txt") - .writeLine("out") + private def writeLine(file: String)(s: String) = + File(s"data/$file.txt") + .writeLine(s) - _ <- File("data/example.txt") - .contents - .map(Console.printLine(_)) + private val programs = + List[(String, String)]( + "one-line.txt" -> "one line", + "two-lines.txt" -> (Line.mkString _) + .apply(List("foo", "bar").map(Line(_))) + ) + + def run: Task[Unit] = + for { + // just a traverse in slow motion... + _ <- programs + .map { case (f, s) => File(s"data/$f").writeLine(s) } + .foldLeft[Task[Unit]](ZIO.unit)((acc, z) => acc *> z) } yield ()