Core concept

sealed trait Action[A]
case class Get(k: String) extends Action[Int]
// Free[Action, ?] program built + interpreted
Advertisement

How it works

Complex to implement. Tagless final often preferred.

Advertisement

Trade-offs + gotchas

DSLs, testing pure programs, effect isolation.