Skip to content

Instantly share code, notes, and snippets.

@danslapman
Created July 3, 2018 17:16
Show Gist options
  • Save danslapman/08b4aab1f8e593bf10d92b75e70e7463 to your computer and use it in GitHub Desktop.
Save danslapman/08b4aab1f8e593bf10d92b75e70e7463 to your computer and use it in GitHub Desktop.
Kleisli demonstration
interp.configureCompiler(_.settings.YpartialUnification.value = true)
import $file.`conf`
import $ivy.`org.typelevel::cats-core:1.1.0`
import cats.data.Kleisli
import cats.instances.future._
import cats.syntax.compose._
import cats.syntax.traverse._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
val f1 = (i: Int) => Future(i + 2)
val f2 = (i: Int) => Future(i * 3)
val f3 = (i: Int) => Future(i - 1)
val f = Kleisli(f1) >>> Kleisli(f2) >>> Kleisli(f3)
println(f(2))
val r = Future.successful(42)
val sf = (i: Int) => (s: String) => Future.successful(s"$i$s")
val ksf = sf.andThen(Kleisli(_))
val rx = Kleisli.liftF(r).flatMap(ksf).run
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment