Explain purpose of Kleisli Categories from the programmer's perspective#191
Explain purpose of Kleisli Categories from the programmer's perspective#191wongjiahau wants to merge 1 commit intohmemcpy:masterfrom
Conversation
| programs that in imperative languages are traditionally implemented | ||
| using side effects. | ||
|
|
||
| But, what is the real purpose of this concept from the perspective of a |
There was a problem hiding this comment.
I partially agree with this statement because I believe the real purpose of this concept for programmers is a composition for a monadic functions.
e.g.(code is scala)
type Foo = Kleisli[IO, Int, String]
type Bar = Kleisli[IO, String, String]
can be easily composed like Bar compose Foo
There was a problem hiding this comment.
If that is the case it would be good if you can add on upon the content I’ve written.
There was a problem hiding this comment.
If that is the case it would be good if you can add on upon the content I’ve written.
Hi, I'll try to add a description tomorrow
There was a problem hiding this comment.
Fortunately, I have time to write today:
But, what is the real purpose of this concept from the perspective of a programmer?
Since arrows in Kleisli category is monadic functions and we know from a category definition that arrows have to be composable inside a category.
So the Kleisli category just gives us a composition for monadic function.
Let's say we have to read text from a file and save it to a database.
We have 2 arrows:
type FileReader = String=> IO[String]
type DbWriter = String => IO[Unit]
It is not possible to compose them since FileReader returns IO[String] not String as DbWriter expects. So what can we do?
Just wrapped functions by Kleisli
type FileReaderKleisli = Kleisli[IO, String, String]
type DbWriterKleisli = Kleisli[IO, String, Unit]
and now we can easily compose them as DbWriterKleisli(DbWriter) compose FileReaderKleisli(FileReader)
All code is written in Scala(https://www.scala-lang.org/) and Kleisli type signature is taken from https://typelevel.org/cats/datatypes/kleisli.html
but I don't have time to change pull request directly.
@wongjiahau could you please add and correct if needed my text and add to your pull request?
0e79320 to
4986511
Compare
|
What is the status of this PR ? |
I feel like we need to include such explanation, because at my first read, I was left hanging about what is the purpose of Kleisli Categories.
After all, this book is meant for programmers, so I think it is very important to include such explanation.