Skip to content

Instantly share code, notes, and snippets.

@mmenestret
Created September 14, 2018 16:06
Show Gist options
  • Save mmenestret/6e89d3c98f4ad6eefb70cfa7d05ad22f to your computer and use it in GitHub Desktop.
Save mmenestret/6e89d3c98f4ad6eefb70cfa7d05ad22f to your computer and use it in GitHub Desktop.
trait MonadReader[R, F[_]] {
def read: F[R]
}
trait HasEnv1[R] {
def env1: Lens[R, LowDslEnv1]
}
case class LowDslEnv1()
def myLowDsl1[R: HasEnv1, F[_]: MonadReader[R, ?]]: F[Unit] = ???
trait HasEnv2[R] {
def env2: Lens[R, LowDslEnv2]
}
case class LowDslEnv2()
def myLowDsl2[R: HasEnv2, F[_]: MonadReader[R, ?]]: F[Unit] = ???
case class GlobalEnv(env1: LowDslEnv1, env2: LowDslEnv2)
object GlobalEnv {
implicit val GlobalEnvHasEnv1: HasEnv1[GlobalEnv] = ???
implicit val GlobalEnvHasEnv2: HasEnv2[GlobalEnv] = ???
}
def myProgram[F[_]: MonadReader[GlobalEnv, ?]]: F[Unit] = ???
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment