Questions tagged [kleisli]

Kleisli is an operator to compose monadic functions. if you have one monadic function that takes in As and outputs Bs and another monadic function that takes in Bs and outputs Cs, and you want to chain them together, you use Kleisli composition.

38 questions
3
votes
1 answer

How to combine option with Kleisli

Given a method def f[A, B, C](a: A) : Kleisli[Future, B, C] = ??? I need a combinator working with an Option[A] My first try was : def g[A, B, C](a: Option[A], default: => C) = a match { case Some(a) => save(a) case None => Kleisli[Future, B,…
Yann Moisan
  • 8,161
  • 8
  • 47
  • 91
3
votes
1 answer

Kleisli Arrow with Writer in Scala. Why doesn't it compile?

This is a followup to my previous question. Looks like I still did not get it. Now I am trying to compose functions that return Writer monad. scala> val f = {x:Int => Writer("doing " + x + ";", x + 1)} f: Int =>…
Michael
  • 41,026
  • 70
  • 193
  • 341
3
votes
1 answer

Lift Kleisli arrow into IO?

If I have the following two Kleisli arrows: stdoutProcessA :: Kleisli Maybe String (IO String) writeToFileA :: Kleisli Maybe (FilePath, String) (IO ()) I would like to be able to write someting like: compile = proc src -> do output <-…
Philip Kamenarsky
  • 2,757
  • 2
  • 24
  • 30
2
votes
2 answers

Kleisli dependencies with Tagless Final style

I am trying to model a dependency using Kleisli. For instance, let's imagine I have the following business logic types: import $ivy.`org.typelevel:cats-core_2.13:2.2.0` import cats._ import cats.implicits._ trait Decoder[F[_]] { def decode(s:…
Dmytro Mykhailov
  • 249
  • 1
  • 3
  • 14
2
votes
0 answers

Clarifying some functional Programming jargon in scala

Although at this point i am quite ok with function1 Monad and its transformer version i.e. Kleisli composition, going back into a book I originally started with, i still can't really understand the jargon that what used, somewhat to stress the…
MaatDeamon
  • 9,532
  • 9
  • 60
  • 127
2
votes
1 answer

Scala Kleisli throws an error in IntelliJ

trying to implement Kleisli category for a made-up Partial type in Scala (reading Bartosz Milewski's "category theory for programmers", that's exersize for chapter 4) object Kleisli { type Partial[A, B] = A => Option[B] implicit class…
Vasily802
  • 1,703
  • 2
  • 18
  • 35
2
votes
1 answer

Arrow law: first depends only on the first component of the pair. Why do we need this one?

John Hughes in his "Generalising Monads to Arrows" writes (chapter 8): We formalise the property that first f depends only on first components of pairs as follows: first f >>> arr fst = arr fst >>> f I understand that the law filters out…
Zhiltsoff Igor
  • 1,812
  • 8
  • 24
2
votes
2 answers

Application of functions and Kleisli arrows

(.) and (<=<) are quite similar: (.) :: (b -> c) -> (a -> b) -> (a -> c) (<=<) :: Monad m => (b -> m c) -> (a -> m b) -> (a -> m c) and are available as a method in the Category type class ((->) and Kleisli instances): (<<<) ::…
user1804599
2
votes
1 answer

Using scalaz kleisli without explicit wrapping the function before

Let's say I have two functions val f: A => M[B] and val g: B => M[C] where M is monadic. Thus I want to combine them by using kleisli. What I currently do is this: kleisliU(f) andThenK g But I have not found a way to execute this combination without…
valenterry
  • 757
  • 6
  • 21
2
votes
1 answer

Are there interesting examples of composing Kleisli endomorphisms?

This is a follow-up to my previous question We can define a function that finds an XML node by path (List[String], XmlNode) => Option[XmlNode] as a composition of functions (String, XmlNode) => Option[XmlNode] that get a child node by name. We use…
Michael
  • 41,026
  • 70
  • 193
  • 341
2
votes
1 answer

Cannot find Bind instances for Free Monads over Coyoneda when composing functions via Kleisli arrows in scalaz

Thank you in advance for your help I have 2 functions that I am trying to compose via Kleisli arrows. The functions accept String and produce FreeC. The kleisli arrows are created without an issue but the compiler is complaining that it cannot find.…
vadimich
  • 770
  • 5
  • 10
2
votes
1 answer

How to fix this exercise with Endomorphic wrapper?

This is a follow-up to my previous question. Suppose I need to find an XML node by path. I can write a function to get a child node by name import scala.xml.{Node => XmlNode} def child(name: String): XmlNode = Option[XmlNode] =…
Michael
  • 41,026
  • 70
  • 193
  • 341
2
votes
2 answers

Composing functions that return an option

Suppose I have a few functions of type Int => Option[Int]: def foo(n: Int): Int => Option[Int] = {x => if (x == n) none else x.some} val f0 = foo(0) val f1 = foo(1) I can compose them with >=> as follows: val composed: Int => Option[Int] =…
Michael
  • 41,026
  • 70
  • 193
  • 341
2
votes
1 answer

Is Kleisli a functor, applicative, or monad?

This question is inspired by the feedback given to my previous question Scalaz provides a wrapper class Kleisli[M[_], A, B] for a function A => M[B]. Kleisli[M[_], A, B] is a semigroup if M[_] is a semigroup. Suppose that M[_] is a functor. Is it…
Michael
  • 41,026
  • 70
  • 193
  • 341
1
vote
2 answers

Understanding monadic function composition

I am learning about monads from the book 'Learn You a Haskell for Great Good!' by Miran Lipovaca. I am trying to understand the associativity law for monads. Essentially, the law states that when you have a chain of monadic function applications…
ceno980
  • 2,003
  • 1
  • 19
  • 37