trait Json
trait JsonWriter[-A] {
def write(value: A): Json
}
val shape: Shape = ???
val circle: Circle = ???
val shapeWriter: JsonWriter[Shape] = ???
val circleWriter: JsonWriter[Circle] = ???
def format[A](value: A, writer: JsonWriter[A]): Json =
writer.write(value)
import cats.{Id, Monad}
import cats.syntax.functor._ // for map
import cats.syntax.flatMap._ // for flatMap
val a = Monad[Id].pure(3)
// a: cats.Id[Int] = 3
val b = Monad[Id].flatMap(a)(_ + 1)
// b: cats.Id[Int] = 4
for {
x <- a
y <- b
} yield x + y
// res6: cats.Id[Int] = 7
import cats.Eval
val now = Eval.now(1)
val later = Eval.later(2)
val always = Eval.always(3)