From 254c63a16f620e7839da80beebbcbea57ed52336 Mon Sep 17 00:00:00 2001 From: "Dr. Carsten Leue" Date: Fri, 6 Oct 2023 23:02:45 +0200 Subject: [PATCH] fix: add missing ChainReaderIOK Signed-off-by: Dr. Carsten Leue --- context/readerioeither/generic/reader.go | 28 ++++++++++++++++++++++++ context/readerioeither/reader.go | 8 +++++++ readerioeither/generic/reader.go | 17 ++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/context/readerioeither/generic/reader.go b/context/readerioeither/generic/reader.go index 4471b67..91f2467 100644 --- a/context/readerioeither/generic/reader.go +++ b/context/readerioeither/generic/reader.go @@ -480,6 +480,34 @@ func ChainIOK[ return RIE.ChainIOK[GRA, GRB](f) } +func MonadChainReaderIOK[ + GRB ~func(context.Context) GIOB, + GRA ~func(context.Context) GIOA, + GRIO ~func(context.Context) GIO, + + GIOA ~func() E.Either[error, A], + GIOB ~func() E.Either[error, B], + + GIO ~func() B, + + A, B any](ma GRA, f func(A) GRIO) GRB { + return RIE.MonadChainReaderIOK[GRA, GRB](ma, f) +} + +func ChainReaderIOK[ + GRB ~func(context.Context) GIOB, + GRA ~func(context.Context) GIOA, + GRIO ~func(context.Context) GIO, + + GIOA ~func() E.Either[error, A], + GIOB ~func() E.Either[error, B], + + GIO ~func() B, + + A, B any](f func(A) GRIO) func(ma GRA) GRB { + return RIE.ChainReaderIOK[GRA, GRB](f) +} + func MonadChainFirstIOK[ GRA ~func(context.Context) GIOA, GIOA ~func() E.Either[error, A], diff --git a/context/readerioeither/reader.go b/context/readerioeither/reader.go index a914c20..3cd52dd 100644 --- a/context/readerioeither/reader.go +++ b/context/readerioeither/reader.go @@ -164,6 +164,14 @@ func Never[A any]() ReaderIOEither[A] { return G.Never[ReaderIOEither[A]]() } +func MonadChainReaderIOK[A, B any](ma ReaderIOEither[A], f func(A) RIO.ReaderIO[B]) ReaderIOEither[B] { + return G.MonadChainReaderIOK[ReaderIOEither[B], ReaderIOEither[A]](ma, f) +} + +func ChainReaderIOK[A, B any](f func(A) RIO.ReaderIO[B]) func(ma ReaderIOEither[A]) ReaderIOEither[B] { + return G.ChainReaderIOK[ReaderIOEither[B], ReaderIOEither[A]](f) +} + func MonadChainIOK[A, B any](ma ReaderIOEither[A], f func(A) IO.IO[B]) ReaderIOEither[B] { return G.MonadChainIOK[ReaderIOEither[B], ReaderIOEither[A]](ma, f) } diff --git a/readerioeither/generic/reader.go b/readerioeither/generic/reader.go index a08a947..3c28211 100644 --- a/readerioeither/generic/reader.go +++ b/readerioeither/generic/reader.go @@ -147,6 +147,23 @@ func ChainReaderK[GEA ~func(R) GIOA, GEB ~func(R) GIOB, GIOA ~func() ET.Either[E ) } +func MonadChainReaderIOK[GEA ~func(R) GIOEA, GEB ~func(R) GIOEB, GIOEA ~func() ET.Either[E, A], GIOEB ~func() ET.Either[E, B], GIOB ~func() B, GB ~func(R) GIOB, R, E, A, B any](ma GEA, f func(A) GB) GEB { + return FR.MonadChainReaderK( + MonadChain[GEA, GEB, GIOEA, GIOEB, R, E, A, B], + RightReaderIO[GEB, GIOEB, GB, GIOB, R, E, B], + ma, + f, + ) +} + +func ChainReaderIOK[GEA ~func(R) GIOEA, GEB ~func(R) GIOEB, GIOEA ~func() ET.Either[E, A], GIOEB ~func() ET.Either[E, B], GIOB ~func() B, GB ~func(R) GIOB, R, E, A, B any](f func(A) GB) func(GEA) GEB { + return FR.ChainReaderK( + MonadChain[GEA, GEB, GIOEA, GIOEB, R, E, A, B], + RightReaderIO[GEB, GIOEB, GB, GIOB, R, E, B], + f, + ) +} + func MonadChainIOEitherK[GEA ~func(R) GIOA, GEB ~func(R) GIOB, GIOA ~func() ET.Either[E, A], GIOB ~func() ET.Either[E, B], R, E, A, B any](ma GEA, f func(A) GIOB) GEB { return FIOE.MonadChainIOEitherK( MonadChain[GEA, GEB, GIOA, GIOB, R, E, A, B],