a
IO.recoverWith/IO.flatMap
Size: a a a
a
IO.recoverWith/IO.flatMap
Oℕ
w
a
(L, *)
и R => *
a
Either[L, *]
точно работаетa
MonadThrow
a
I[A] = R => A
, то flatMap
странный получаетсяa
def flatMap[A, B](f: (R => A) => F[B]): F[A] => F[B]
P
a
trait RMonad[I[_], F[_]] {
def pure[A](ja: I[A]): F[A]
def flatMap[A, B](ma: F[A])(f: I[A] => F[B]): F[B]
}
final case class Reader[-R, +A](run: R => A)
object Foo {
def foo[R]: RMonad[(R => *), Reader[R, *]] =
new RMonad[(R => *), Reader[R, *]] {
type I[A] = R => A
type F[A] = Reader[R, A]
def pure[A](ja: I[A]): F[A] = Reader(ja)
def flatMap[A, B](ma: F[A])(f: I[A] => F[B]): F[B] = f(ma.run)
}
}
w
trait RMonad[I[_], F[_]] {
def pure[A](ja: I[A]): F[A]
def flatMap[A, B](ma: F[A])(f: I[A] => F[B]): F[B]
}
final case class Reader[-R, +A](run: R => A)
object Foo {
def foo[R]: RMonad[(R => *), Reader[R, *]] =
new RMonad[(R => *), Reader[R, *]] {
type I[A] = R => A
type F[A] = Reader[R, A]
def pure[A](ja: I[A]): F[A] = Reader(ja)
def flatMap[A, B](ma: F[A])(f: I[A] => F[B]): F[B] = f(ma.run)
}
}
KC
a
a
a
a
a