1
1
package kategory
2
2
3
- typealias KleisiTKind <F , A , B > = HK3 <Kleisli .F , F , A , B >
4
- typealias KleisiF <F > = HK <Kleisli .F , F >
3
+ typealias KleisliTKind <F , A , B > = HK3 <Kleisli .F , F , A , B >
4
+ typealias KleisliF <F > = HK <Kleisli .F , F >
5
5
6
- typealias KleisiFun <F , D , A > = (D ) -> HK <F , A >
6
+ typealias KleisliFun <F , D , A > = (D ) -> HK <F , A >
7
7
8
8
typealias ReaderT <F , D , A > = Kleisli <F , D , A >
9
9
10
- fun <F , D , A > KleisiTKind <F , D , A >.ev (): Kleisli <F , D , A > =
10
+ fun <F , D , A > KleisliTKind <F , D , A >.ev (): Kleisli <F , D , A > =
11
11
this as Kleisli <F , D , A >
12
12
13
- class Kleisli <F , D , A >(val MF : Monad <F >, val run : KleisiFun <F , D , A >) : KleisiTKind <F, D, A> {
13
+ class Kleisli <F , D , A >(val MF : Monad <F >, val run : KleisliFun <F , D , A >) : KleisliTKind <F, D, A> {
14
14
class F private constructor()
15
15
16
16
fun <B > map (f : (A ) -> B ): Kleisli <F , D , B > =
@@ -29,15 +29,18 @@ class Kleisli<F, D, A>(val MF: Monad<F>, val run: KleisiFun<F, D, A>) : KleisiTK
29
29
fun <DD > local (f : (DD ) -> D ): Kleisli <F , DD , A > =
30
30
Kleisli (MF , { dd -> run (f(dd)) })
31
31
32
- fun <B > andThen (f : (A ) -> HK <F , B >): Kleisli <F , D , B > =
32
+ infix fun <C > andThen (f : Kleisli <F , A , C >): Kleisli <F , D , C > =
33
+ andThen(f.run)
34
+
35
+ infix fun <B > andThen (f : (A ) -> HK <F , B >): Kleisli <F , D , B > =
33
36
Kleisli (MF , { MF .flatMap(run (it), f) })
34
37
35
- fun <B > andThen (a : HK <F , B >): Kleisli <F , D , B > =
38
+ infix fun <B > andThen (a : HK <F , B >): Kleisli <F , D , B > =
36
39
andThen({ a })
37
40
38
41
companion object {
39
42
40
- inline operator fun <reified F , D , A > invoke (noinline run : KleisiFun <F , D , A >, MF : Monad <F > = monad<F >()): Kleisli <F , D , A > =
43
+ inline operator fun <reified F , D , A > invoke (noinline run : KleisliFun <F , D , A >, MF : Monad <F > = monad<F >()): Kleisli <F , D , A > =
41
44
Kleisli (MF , run)
42
45
43
46
@JvmStatic inline fun <reified F , D , A > pure (x : A , MF : Monad <F > = monad<F >()): Kleisli <F , D , A > =
0 commit comments