@@ -5,6 +5,7 @@ package kategory
5
5
@higherkind data class WriterT <F , W , A >(val MF : Monad <F >, val value : HK <F , Tuple2 <W , A >>) : WriterTKind<F, W, A> {
6
6
7
7
companion object {
8
+
8
9
inline fun <reified F , reified W , A > pure (a : A , MM : Monoid <W > = monoid(), MF : Monad <F > = kategory.monad()) = WriterT (MF .pure(MM .empty() toT a), MF )
9
10
10
11
inline fun <reified F , W , A > both (w : W , a : A , MF : Monad <F > = kategory.monad()) = WriterT (MF .pure(w toT a), MF )
@@ -13,58 +14,66 @@ package kategory
13
14
14
15
inline operator fun <reified F , W , A > invoke (value : HK <F , Tuple2 <W , A >>, MF : Monad <F > = kategory.monad()) = WriterT (MF , value)
15
16
16
- inline fun <reified F , reified W > instances (MM : Monad <F > = kategory.monad(), SG : Monoid <W > = kategory.monoid<W >()): WriterTInstances <F , W > =
17
- object : WriterTInstances <F , W > {
18
-
19
- override fun <A > writer (aw : Tuple2 <W , A >): WriterT <F , W , A > = WriterT .put(aw.b, aw.a)
20
-
21
- override fun <A > listen (fa : HK <WriterTKindPartial <F , W >, A >): HK <WriterTKindPartial <F , W >, Tuple2<W, A>> =
22
- WriterT (MM , MM .flatMap(fa.ev().content(), { a -> MM .map(fa.ev().write(), { l -> Tuple2 (l, Tuple2 (l, a)) }) }))
23
-
24
- override fun <A > pass (fa : HK <WriterTKindPartial <F , W >, Tuple2 <(W ) -> W , A >>): HK <WriterTKindPartial <F , W >, A> =
25
- WriterT (MM , MM .flatMap(fa.ev().content(), { tuple2FA -> MM .map(fa.ev().write(), { l -> Tuple2 (tuple2FA.a(l), tuple2FA.b) }) }))
26
-
27
- override fun tell (w : W ): HK <WriterTKindPartial <F , W >, Unit> = WriterT .tell(w)
28
-
29
- override fun MM (): Monad <F > = MM
30
-
31
- override fun SG (): Monoid <W > = SG
17
+ inline fun <reified F , reified W > functor (FF : Functor <F > = kategory.functor<F >()): WriterTFunctor <F , W > =
18
+ object : WriterTFunctor <F , W > {
19
+ override fun F0 (): Functor <F > = FF
32
20
}
33
21
34
- inline fun <reified F , reified W > functor (MM : Monad <F > = kategory.monad<F >(), SG : Monoid <W > = kategory.monoid<W >()): Functor <WriterTKindPartial <F , W >> =
35
- instances(MM , SG )
36
-
37
- inline fun <reified F , reified W > applicative (MM : Monad <F > = kategory.monad<F >(), SG : Monoid <W > = kategory.monoid<W >()):
38
- Applicative <WriterTKindPartial <F , W >> = instances(MM , SG )
22
+ inline fun <reified F , reified W > applicative (MF : Monad <F > = kategory.monad<F >(),
23
+ MW : Monoid <W > = kategory.monoid<W >()): WriterTApplicative <F , W > =
24
+ object : WriterTApplicative <F , W > {
25
+ override fun F0 (): Monad <F > = MF
26
+ override fun L0 (): Monoid <W > = MW
27
+ }
39
28
40
- inline fun <reified F , reified W > monad (MM : Monad <F > = kategory.monad<F >(), SG : Monoid <W > = kategory.monoid<W >()): Monad <WriterTKindPartial <F , W >> =
41
- instances(MM , SG )
29
+ inline fun <reified F , reified W > monad (MF : Monad <F > = kategory.monad<F >(), MW : Monoid <W > = kategory.monoid<W >()): WriterTMonad <F , W > =
30
+ object : WriterTMonadWriter <F , W > {
31
+ override fun F0 (): Monad <F > = MF
32
+ override fun L0 (): Monoid <W > = MW
33
+ }
42
34
43
- inline fun <reified F , reified W > semigroupK (MF : Monad <F > = monad<F >(), SGK : SemigroupK <F > = semigroupK<F >()): SemigroupK < WriterTKindPartial < F , W > > =
35
+ inline fun <reified F , reified W > semigroupK (MF : Monad <F > = monad<F >(), MKF : SemigroupK <F > = semigroupK<F >()): WriterTSemigroupK < F , W > =
44
36
object : WriterTSemigroupK <F , W > {
45
37
override fun MF (): Monad <F > = MF
46
-
47
- override fun GF (): SemigroupK <F > = SGK
38
+ override fun F0 (): SemigroupK <F > = MKF
48
39
}
49
40
50
- inline fun <reified F , reified W > monoidK (MF : Monad <F > = monad<F >(), MKF : MonoidK <F > = monoidK<F >()): MonoidK < WriterTKindPartial < F , W > > =
41
+ inline fun <reified F , reified W > monoidK (MF : Monad <F > = monad<F >(), MKF : MonoidK <F > = monoidK<F >()): WriterTMonoidK < F , W > =
51
42
object : WriterTMonoidK <F , W > {
52
43
override fun MF (): Monad <F > = MF
44
+ override fun F0 (): MonoidK <F > = MKF
45
+ }
53
46
54
- override fun GF (): MonoidK <F > = MKF
47
+ inline fun <reified F , reified W > monadWriter (MF : Monad <F > = kategory.monad(),
48
+ MW : Monoid <W > = kategory.monoid()): WriterTMonadWriter <F , W > =
49
+ object : WriterTMonadWriter <F , W > {
50
+ override fun F0 (): Monad <F > = MF
51
+ override fun L0 (): Monoid <W > = MW
55
52
}
56
53
57
- inline fun <reified F , reified W > monadWriter (MM : Monad <F > = kategory.monad(), SG : Monoid <W > = kategory.monoid()):
58
- MonadWriter <WriterTKindPartial <F , W >, W > = instances(MM , SG )
54
+ inline fun <reified F , reified W > monadFilter (MF : MonadFilter <F > = kategory.monadFilter(),
55
+ MW : Monoid <W > = kategory.monoid()): WriterTMonadFilter <F , W > =
56
+ object : WriterTMonadFilter <F , W > {
57
+ override fun F0 (): MonadFilter <F > = MF
58
+ override fun L0 (): Monoid <W > = MW
59
+ }
59
60
60
61
inline fun <reified F , W , A > putT (vf : HK <F , A >, w : W , MF : Monad <F > = kategory.monad()): WriterT <F , W , A > =
61
62
WriterT (MF , MF .map(vf, { v -> Tuple2 (w, v) }))
62
63
63
64
inline fun <reified F , W , A > put (a : A , w : W , applicativeF : Applicative <F > = kategory.applicative()): WriterT <F , W , A > =
64
65
WriterT .putT(applicativeF.pure(a), w)
65
66
67
+ fun <F , W , A > putT2 (vf : HK <F , A >, w : W , MF : Monad <F >): WriterT <F , W , A > =
68
+ WriterT (MF , MF .map(vf, { v -> Tuple2 (w, v) }))
69
+
70
+ fun <F , W , A > put2 (a : A , w : W , MF : Monad <F >): WriterT <F , W , A > =
71
+ WriterT .putT2(MF .pure(a), w, MF )
72
+
66
73
inline fun <reified F , W > tell (l : W , applicativeF : Applicative <F > = kategory.applicative()): WriterT <F , W , Unit > = WriterT .put(Unit , l)
67
74
75
+ fun <F , W > tell2 (l : W , MF : Monad <F >): WriterT <F , W , Unit > = WriterT .put2(Unit , l, MF )
76
+
68
77
inline fun <reified F , reified W , A > value (v : A , applicativeF : Applicative <F > = kategory.applicative(), monoidW : Monoid <W > = monoid()):
69
78
WriterT <F , W , A > = WriterT .put(v, monoidW.empty())
70
79
0 commit comments