File tree Expand file tree Collapse file tree 1 file changed +22
-0
lines changed Expand file tree Collapse file tree 1 file changed +22
-0
lines changed Original file line number Diff line number Diff line change
1
+ trait Apply [F [_]]:
2
+ extension [A ](fa : F [A ])
3
+ def map [B ](f : A => B ): F [B ]
4
+ def map2 [B , Z ](fb : F [B ])(f : (A , B ) => Z ): F [Z ] = ???
5
+
6
+ private case class IsMap [T <: Tuple ](value : Tuple .Map [T , F ])
7
+ private inline def tupledGeneric [T <: Tuple ](tuple : Tuple .Map [T , F ]): F [T ] =
8
+ inline IsMap (tuple) match
9
+ case t : IsMap [h *: EmptyTuple ] => t.value.head.map(_ *: EmptyTuple )
10
+ case t : IsMap [h *: t] =>
11
+ val head = t.value.head
12
+ val tail = tupledGeneric(t.value.tail)
13
+ head.map2(tail)(_ *: _)
14
+
15
+ trait Monad [F [_]] extends Apply [F ]:
16
+ extension [A ](fa : F [A ]) def flatMap [B ](f : A => F [B ]): F [B ]
17
+ extension [A ](fa : F [A ]) override def map [B ](f : A => B ): F [B ] = ???
18
+
19
+ opaque type Kleisli [F [_], A , B ] = A => F [B ]
20
+ given [F [_], A ](using F : Monad [F ]): Monad [[B ] =>> Kleisli [F , A , B ]] with
21
+ extension [B ](k : Kleisli [F , A , B ])
22
+ def flatMap [C ](f : B => Kleisli [F , A , C ]) = ???
You can’t perform that action at this time.
0 commit comments