@@ -65,9 +65,9 @@ private[data] sealed abstract class WriterTInstances extends WriterTInstances0 {
6565}
6666
6767private [data] sealed abstract class WriterTInstances0 extends WriterTInstances1 {
68- implicit def writerTMonad [F [_], L ](implicit F : Monad [F ], L : Monoid [L ]): Monad [WriterT [F , L , ? ]] =
69- new WriterTMonad [F , L ] {
70- implicit val F0 : Monad [F ] = F
68+ implicit def writerTMonadCombine [F [_], L ](implicit F : MonadCombine [F ], L : Monoid [L ]): MonadCombine [WriterT [F , L , ? ]] =
69+ new WriterTMonadCombine [F , L ] {
70+ implicit val F0 : MonadCombine [F ] = F
7171 implicit val L0 : Monoid [L ] = L
7272 }
7373
@@ -82,29 +82,63 @@ private[data] sealed abstract class WriterTInstances0 extends WriterTInstances1
8282}
8383
8484private [data] sealed abstract class WriterTInstances1 extends WriterTInstances2 {
85+ implicit def writerTMonadFilter [F [_], L ](implicit F : MonadFilter [F ], L : Monoid [L ]): MonadFilter [WriterT [F , L , ? ]] =
86+ new WriterTMonadFilter [F , L ] {
87+ implicit val F0 : MonadFilter [F ] = F
88+ implicit val L0 : Monoid [L ] = L
89+ }
90+ }
91+ private [data] sealed abstract class WriterTInstances2 extends WriterTInstances3 {
92+ implicit def writerTMonad [F [_], L ](implicit F : Monad [F ], L : Monoid [L ]): Monad [WriterT [F , L , ? ]] =
93+ new WriterTMonad [F , L ] {
94+ implicit val F0 : Monad [F ] = F
95+ implicit val L0 : Monoid [L ] = L
96+ }
97+ }
98+
99+ private [data] sealed abstract class WriterTInstances3 extends WriterTInstances4 {
100+ implicit def writerTAlternative [F [_], L ](implicit F : Alternative [F ], L : Monoid [L ]): Alternative [WriterT [F , L , ? ]] =
101+ new WriterTAlternative [F , L ] {
102+ implicit val F0 : Alternative [F ] = F
103+ implicit val L0 : Monoid [L ] = L
104+ }
105+ }
106+
107+ private [data] sealed abstract class WriterTInstances4 extends WriterTInstances5 {
85108 implicit def writerTApplicative [F [_], L ](implicit F : Applicative [F ], L : Monoid [L ]): Applicative [WriterT [F , L , ? ]] =
86109 new WriterTApplicative [F , L ] {
87110 implicit val F0 : Applicative [F ] = F
88111 implicit val L0 : Monoid [L ] = L
89112 }
113+
114+ implicit def writerTMonoidK [F [_], L ](implicit F : MonoidK [F ]): MonoidK [WriterT [F , L , ? ]] =
115+ new WriterTMonoidK [F , L ] {
116+ implicit val F0 : MonoidK [F ] = F
117+ }
90118}
91- private [data] sealed abstract class WriterTInstances2 extends WriterTInstances3 {
119+
120+ private [data] sealed abstract class WriterTInstances5 extends WriterTInstances6 {
92121 implicit def writerTFlatMap [F [_], L ](implicit F : FlatMap [F ], L : Semigroup [L ]): FlatMap [WriterT [F , L , ? ]] =
93122 new WriterTFlatMap [F , L ] {
94123 implicit val F0 : FlatMap [F ] = F
95124 implicit val L0 : Semigroup [L ] = L
96125 }
126+
127+ implicit def writerTSemigroupK [F [_], L ](implicit F : SemigroupK [F ]): SemigroupK [WriterT [F , L , ? ]] =
128+ new WriterTSemigroupK [F , L ] {
129+ implicit val F0 : SemigroupK [F ] = F
130+ }
97131}
98132
99- private [data] sealed abstract class WriterTInstances3 extends WriterTInstances4 {
133+ private [data] sealed abstract class WriterTInstances6 extends WriterTInstances7 {
100134 implicit def writerTApply [F [_], L ](implicit F : Apply [F ], L : Semigroup [L ]): Apply [WriterT [F , L , ? ]] =
101135 new WriterTApply [F , L ] {
102136 implicit val F0 : Apply [F ] = F
103137 implicit val L0 : Semigroup [L ] = L
104138 }
105139}
106140
107- private [data] sealed abstract class WriterTInstances4 {
141+ private [data] sealed abstract class WriterTInstances7 {
108142 implicit def writerTFunctor [F [_], L ](implicit F : Functor [F ]): Functor [WriterT [F , L , ? ]] = new WriterTFunctor [F , L ] {
109143 implicit val F0 : Functor [F ] = F
110144 }
@@ -151,6 +185,33 @@ private[data] sealed trait WriterTMonad[F[_], L] extends WriterTApplicative[F, L
151185 fa.flatMap(f)
152186}
153187
188+ private [data] sealed trait WriterTSemigroupK [F [_], L ] extends SemigroupK [WriterT [F , L , ? ]] {
189+ implicit def F0 : SemigroupK [F ]
190+
191+ def combine [A ](x : WriterT [F , L , A ], y : WriterT [F , L , A ]): WriterT [F , L , A ] =
192+ WriterT (F0 .combine(x.run, y.run))
193+ }
194+
195+ private [data] sealed trait WriterTMonoidK [F [_], L ] extends MonoidK [WriterT [F , L , ? ]] with WriterTSemigroupK [F , L ] {
196+ override implicit def F0 : MonoidK [F ]
197+
198+ def empty [A ]: WriterT [F , L , A ] = WriterT (F0 .empty)
199+ }
200+
201+ private [data] sealed trait WriterTAlternative [F [_], L ] extends Alternative [WriterT [F , L , ? ]] with WriterTMonoidK [F , L ] with WriterTApplicative [F , L ] {
202+ override implicit def F0 : Alternative [F ]
203+ }
204+
205+ private [data] sealed trait WriterTMonadFilter [F [_], L ] extends MonadFilter [WriterT [F , L , ? ]] with WriterTMonad [F , L ] {
206+ override implicit def F0 : MonadFilter [F ]
207+
208+ def empty [A ]: WriterT [F , L , A ] = WriterT (F0 .empty)
209+ }
210+
211+ private [data] sealed trait WriterTMonadCombine [F [_], L ] extends MonadCombine [WriterT [F , L , ? ]] with WriterTMonad [F , L ] with WriterTAlternative [F , L ] {
212+ override implicit def F0 : MonadCombine [F ]
213+ }
214+
154215trait WriterTFunctions {
155216 def putT [F [_], L , V ](vf : F [V ])(l : L )(implicit functorF : Functor [F ]): WriterT [F , L , V ] =
156217 WriterT (functorF.map(vf)(v => (l, v)))
0 commit comments