Skip to content

Commit 8ca1096

Browse files
authored
Add some more implementations to Function0 and Function1 Monads (#3515)
* Add some more implementations to Function0 and Function1 Monads * fix dotty compilation * address review comments
1 parent 5ac10ad commit 8ca1096

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

core/src/main/scala/cats/instances/function.scala

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,18 @@ sealed private[instances] trait Function0Instances extends Function0Instances0 {
7171

7272
def pure[A](x: A): () => A = () => x
7373

74+
override def map[A, B](fa: () => A)(fn: A => B): () => B =
75+
() => fn(fa())
76+
77+
override def map2[A, B, C](fa: () => A, fb: () => B)(fn: (A, B) => C): () => C =
78+
() => fn(fa(), fb())
79+
80+
override def product[A, B](fa: () => A, fb: () => B): () => (A, B) =
81+
() => (fa(), fb())
82+
83+
override def ap[A, B](f: () => A => B)(fa: () => A): () => B =
84+
() => f()(fa())
85+
7486
def flatMap[A, B](fa: () => A)(f: A => () => B): () => B =
7587
() => f(fa())()
7688

@@ -122,6 +134,15 @@ sealed private[instances] trait Function1Instances extends Function1Instances0 {
122134
override def map[R1, R2](fa: T1 => R1)(f: R1 => R2): T1 => R2 =
123135
f.compose(fa)
124136

137+
override def map2[A, B, C](fa: T1 => A, fb: T1 => B)(fn: (A, B) => C): T1 => C =
138+
t => fn(fa(t), fb(t))
139+
140+
override def product[A, B](fa: T1 => A, fb: T1 => B): T1 => (A, B) =
141+
t => (fa(t), fb(t))
142+
143+
override def ap[A, B](f: T1 => A => B)(fa: T1 => A): T1 => B =
144+
t => f(t).apply(fa(t))
145+
125146
def tailRecM[A, B](a: A)(fn: A => T1 => Either[A, B]): T1 => B =
126147
(t: T1) => {
127148
@tailrec

0 commit comments

Comments
 (0)