1
1
package io .scalaland .chimney .cats
2
2
3
- import _root_ .cats .{~> , Applicative , CoflatMap , Eval , Monad , MonadError , Parallel , Traverse }
3
+ import _root_ .cats .{~> , Alternative , Applicative , CoflatMap , Eval , Monad , MonadError , Parallel , Traverse }
4
4
import _root_ .cats .arrow .FunctionK
5
5
import _root_ .cats .data .{Chain , NonEmptyChain , NonEmptyList , Validated , ValidatedNec , ValidatedNel }
6
6
import _root_ .cats .kernel .{Eq , Semigroup }
7
7
import io .scalaland .chimney .partial
8
- import io .scalaland .chimney .partial .{ AsResult , Result }
8
+ import io .scalaland .chimney .partial .AsResult
9
9
10
10
import language .implicitConversions
11
11
12
12
/** @since 1.0.0 */
13
13
trait CatsPartialResultImplicits {
14
14
15
15
/** @since 0.7.0 */
16
- implicit final val monadErrorCoflatMapTraversePartialResult
17
- : MonadError [partial.Result , partial.Result .Errors ] & CoflatMap [partial.Result ] & Traverse [partial.Result ] =
18
- new MonadError [partial.Result , partial.Result .Errors ] with CoflatMap [partial.Result ] with Traverse [partial.Result ] {
16
+ implicit final val catsCovariantForPartialResult : MonadError [partial.Result , partial.Result .Errors ] &
17
+ CoflatMap [partial.Result ] &
18
+ Traverse [partial.Result ] &
19
+ Alternative [partial.Result ] =
20
+ new MonadError [partial.Result , partial.Result .Errors ]
21
+ with CoflatMap [partial.Result ]
22
+ with Traverse [partial.Result ]
23
+ with Alternative [partial.Result ] {
19
24
override def pure [A ](x : A ): partial.Result [A ] = partial.Result .Value (x)
20
25
21
26
override def flatMap [A , B ](fa : partial.Result [A ])(f : A => partial.Result [B ]): partial.Result [B ] = fa.flatMap(f)
@@ -55,10 +60,14 @@ trait CatsPartialResultImplicits {
55
60
case partial.Result .Value (value) => f(value, lb)
56
61
case _ => lb
57
62
}
63
+
64
+ override def empty [A ]: partial.Result [A ] = partial.Result .fromEmpty[A ]
65
+
66
+ override def combineK [A ](x : partial.Result [A ], y : partial.Result [A ]): partial.Result [A ] = x.orElse(y)
58
67
}
59
68
60
69
/** @since 1.0.0 */
61
- implicit final val parallelSemigroupalPartialResult : Parallel [partial.Result ] {
70
+ implicit final val catsParallelForPartialResult : Parallel [partial.Result ] {
62
71
type F [A ] = partial.Result [A ]
63
72
} = new Parallel [partial.Result ] {
64
73
override type F [A ] = partial.Result [A ]
@@ -73,69 +82,68 @@ trait CatsPartialResultImplicits {
73
82
partial.Result .map2[A => B , A , B ](ff, fa, (f, a) => f(a), failFast = false )
74
83
}
75
84
76
- override val monad : Monad [partial.Result ] = monadErrorCoflatMapTraversePartialResult
85
+ override val monad : Monad [partial.Result ] = catsCovariantForPartialResult
77
86
}
78
87
79
88
/** @since 0.7.0 */
80
- implicit final val semigroupPartialResultErrors : Semigroup [partial.Result .Errors ] =
89
+ implicit final val catsSemigroupForPartialResultErrors : Semigroup [partial.Result .Errors ] =
81
90
Semigroup .instance(partial.Result .Errors .merge)
82
91
83
92
/** @since 1.0.0 */
84
- implicit final def eqPartialResult [A : Eq ]: Eq [partial.Result [A ]] = {
85
- case (partial.Result .Value (a1), partial.Result .Value (a2)) => Eq [A ].eqv(a1, a2)
86
- case (e1 : partial.Result .Errors , e2 : partial.Result .Errors ) =>
87
- e1.asErrorPathMessages.iterator.sameElements(e2.asErrorPathMessages.iterator)
88
- case _ => false
93
+ implicit final def catsEqForPartialResult [A : Eq ]: Eq [partial.Result [A ]] = {
94
+ case (partial.Result .Value (a1), partial.Result .Value (a2)) => Eq [A ].eqv(a1, a2)
95
+ case (e1 : partial.Result .Errors , e2 : partial.Result .Errors ) => catsEqForPartialResultErrors.eqv(e1, e2)
96
+ case _ => false
89
97
}
90
98
91
99
/** @since 1.0.0 */
92
- implicit final def eqPartialResultErrors : Eq [partial.Result .Errors ] = (e1, e2) =>
100
+ implicit final val catsEqForPartialResultErrors : Eq [partial.Result .Errors ] = (e1, e2) =>
93
101
e1.asErrorPathMessages.iterator.sameElements(e2.asErrorPathMessages.iterator)
94
102
95
103
/** @since 0.7.0 */
96
104
implicit final def catsPartialTransformerResultOps [A ](ptr : partial.Result [A ]): CatsPartialTransformerResultOps [A ] =
97
105
new CatsPartialTransformerResultOps (ptr)
98
106
99
107
/** @since 1.0.0 */
100
- implicit def validatedPartialResultErrorsAsResult [E <: partial.Result .Errors ]: AsResult [Validated [E , * ]] =
108
+ implicit def catsValidatedPartialResultErrorsAsResult [E <: partial.Result .Errors ]: AsResult [Validated [E , * ]] =
101
109
new AsResult [Validated [E , * ]] {
102
- def asResult [A ](fa : Validated [E , A ]): Result [A ] = fa match {
110
+ def asResult [A ](fa : Validated [E , A ]): partial. Result [A ] = fa match {
103
111
case Validated .Valid (a) => partial.Result .fromValue(a)
104
112
case Validated .Invalid (e) => e
105
113
}
106
114
}
107
115
108
116
/** @since 1.0.0 */
109
- implicit def validatedNecPartialErrorAsResult [E <: partial.Error ]: AsResult [ValidatedNec [E , * ]] =
117
+ implicit def catsValidatedNecPartialErrorAsResult [E <: partial.Error ]: AsResult [ValidatedNec [E , * ]] =
110
118
new AsResult [ValidatedNec [E , * ]] {
111
- def asResult [A ](fa : ValidatedNec [E , A ]): Result [A ] = fa match {
119
+ def asResult [A ](fa : ValidatedNec [E , A ]): partial. Result [A ] = fa match {
112
120
case Validated .Valid (a) => partial.Result .fromValue(a)
113
121
case Validated .Invalid (e) => partial.Result .Errors (e.head, e.tail.toList* )
114
122
}
115
123
}
116
124
117
125
/** @since 1.0.0 */
118
- implicit def validatedNelPartialErrorAsResult [E <: partial.Error ]: AsResult [ValidatedNel [E , * ]] =
126
+ implicit def catsValidatedNelPartialErrorAsResult [E <: partial.Error ]: AsResult [ValidatedNel [E , * ]] =
119
127
new AsResult [ValidatedNel [E , * ]] {
120
- def asResult [A ](fa : ValidatedNel [E , A ]): Result [A ] = fa match {
128
+ def asResult [A ](fa : ValidatedNel [E , A ]): partial. Result [A ] = fa match {
121
129
case Validated .Valid (a) => partial.Result .fromValue(a)
122
130
case Validated .Invalid (e) => partial.Result .Errors (e.head, e.tail* )
123
131
}
124
132
}
125
133
126
134
/** @since 1.0.0 */
127
- implicit def validatedNecStringAsResult [E <: String ]: AsResult [ValidatedNec [E , * ]] =
135
+ implicit def catsValidatedNecStringAsResult [E <: String ]: AsResult [ValidatedNec [E , * ]] =
128
136
new AsResult [ValidatedNec [E , * ]] {
129
- def asResult [A ](fa : ValidatedNec [E , A ]): Result [A ] = fa match {
137
+ def asResult [A ](fa : ValidatedNec [E , A ]): partial. Result [A ] = fa match {
130
138
case Validated .Valid (a) => partial.Result .fromValue(a)
131
139
case Validated .Invalid (e) => partial.Result .fromErrorStrings(e.head, e.tail.toList* )
132
140
}
133
141
}
134
142
135
143
/** @since 1.0.0 */
136
- implicit def validatedNelStringAsResult [E <: String ]: AsResult [ValidatedNel [E , * ]] =
144
+ implicit def catsValidatedNelStringAsResult [E <: String ]: AsResult [ValidatedNel [E , * ]] =
137
145
new AsResult [ValidatedNel [E , * ]] {
138
- def asResult [A ](fa : ValidatedNel [E , A ]): Result [A ] = fa match {
146
+ def asResult [A ](fa : ValidatedNel [E , A ]): partial. Result [A ] = fa match {
139
147
case Validated .Valid (a) => partial.Result .fromValue(a)
140
148
case Validated .Invalid (e) => partial.Result .fromErrorStrings(e.head, e.tail* )
141
149
}
0 commit comments