Skip to content

Instantly share code, notes, and snippets.

@halcat0x15a
Created February 6, 2020 08:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save halcat0x15a/3e983ee41d3a7f2cc9b338af04b3a936 to your computer and use it in GitHub Desktop.
Save halcat0x15a/3e983ee41d3a7f2cc9b338af04b3a936 to your computer and use it in GitHub Desktop.
scala> trait Eff[+R[_], A]
// defined trait Eff
scala> enum Reader[I, A] { case Ask[I]() extends Reader[I, I] }
// defined class Reader
scala> enum Writer[W, A] { case Tell[W](value: W) extends Writer[W, Unit] }
// defined class Writer
scala> def run[A](eff: Eff[Nothing, A]): A = ???
def run[A](eff: Eff[Nothing, A]): A
scala> def runWriter[W, R[_], A](eff: Eff[[A] =>> Writer[W, A] | R[A], A]): Eff[R, (W, A)] = ???
def runWriter
[W, R[_$2], A](eff: Eff[[A] => Writer[W, A] | R[A], A]): Eff[R, (W, A)]
scala> def runReader[I, R[_], A](i: I)(eff: Eff[[A] =>> Reader[I, A] | R[A], A]): Eff[R, A] = ???
def runReader
[I, R[_$2], A](i: I)(eff: Eff[[A] => Reader[I, A] | R[A], A]): Eff[R, A]
scala> def e: Eff[[A] =>> Writer[String, A] | Reader[Int, A], Int] = ???
def e: Eff[[A] => Writer[String, A] | Reader[Int, A], Int]
scala> def r = run(runReader(0)(runWriter(e)))
def r: (String, Int)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment