package httpz import scalaz.{One => _, Two => _, _} abstract class Interpreter[F[_]: Monad] { final val interpreter: InterpreterF[F] = new InterpreterF[F] { def apply[A](a: RequestF[A]) = go(a) } protected[this] def go[A](a: RequestF[A]): F[A] final def run[E, A](a: ActionE[E, A]): F[E \/ A] = Free.runFC(a.run)(interpreter) }