mirror of
https://github.com/IBM/fp-go.git
synced 2025-07-15 01:24:23 +02:00
fix: add missing ChainXXIOK to Reader
Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com>
This commit is contained in:
@ -18,6 +18,7 @@ package readerio
|
||||
import (
|
||||
"context"
|
||||
|
||||
IO "github.com/IBM/fp-go/io"
|
||||
L "github.com/IBM/fp-go/lazy"
|
||||
R "github.com/IBM/fp-go/readerio/generic"
|
||||
)
|
||||
@ -38,6 +39,22 @@ func Chain[A, B any](f func(A) ReaderIO[B]) func(ReaderIO[A]) ReaderIO[B] {
|
||||
return R.Chain[ReaderIO[A]](f)
|
||||
}
|
||||
|
||||
func MonadChainIOK[A, B any](fa ReaderIO[A], f func(A) IO.IO[B]) ReaderIO[B] {
|
||||
return R.MonadChainIOK[ReaderIO[A], ReaderIO[B]](fa, f)
|
||||
}
|
||||
|
||||
func ChainIOK[A, B any](f func(A) IO.IO[B]) func(ReaderIO[A]) ReaderIO[B] {
|
||||
return R.ChainIOK[ReaderIO[A], ReaderIO[B]](f)
|
||||
}
|
||||
|
||||
func MonadChainFirstIOK[A, B any](fa ReaderIO[A], f func(A) IO.IO[B]) ReaderIO[A] {
|
||||
return R.MonadChainFirstIOK[ReaderIO[A], ReaderIO[B]](fa, f)
|
||||
}
|
||||
|
||||
func ChainFirstIOK[A, B any](f func(A) IO.IO[B]) func(ReaderIO[A]) ReaderIO[A] {
|
||||
return R.ChainFirstIOK[ReaderIO[A], ReaderIO[B]](f)
|
||||
}
|
||||
|
||||
func Of[A any](a A) ReaderIO[A] {
|
||||
return R.Of[ReaderIO[A]](a)
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ import (
|
||||
"sync"
|
||||
|
||||
F "github.com/IBM/fp-go/function"
|
||||
FIO "github.com/IBM/fp-go/internal/fromio"
|
||||
FR "github.com/IBM/fp-go/internal/fromreader"
|
||||
"github.com/IBM/fp-go/internal/readert"
|
||||
IO "github.com/IBM/fp-go/io/generic"
|
||||
@ -86,11 +87,37 @@ func Asks[GA ~func(E) A, GEA ~func(E) GIOA, GIOA ~func() A, E, A any](r GA) GEA
|
||||
}
|
||||
|
||||
func MonadChainIOK[GEA ~func(E) GIOA, GEB ~func(E) GIOB, GIOA ~func() A, GIOB ~func() B, E, A, B any](ma GEA, f func(A) GIOB) GEB {
|
||||
return MonadChain(ma, F.Flow2(f, FromIO[GEB]))
|
||||
return FIO.MonadChainIOK(
|
||||
MonadChain[GEA, GEB],
|
||||
FromIO[GEB],
|
||||
ma, f,
|
||||
)
|
||||
}
|
||||
|
||||
func ChainIOK[GEA ~func(E) GIOA, GEB ~func(E) GIOB, GIOA ~func() A, GIOB ~func() B, E, A, B any](f func(A) GIOB) func(GEA) GEB {
|
||||
return F.Bind2nd(MonadChainIOK[GEA, GEB, GIOA, GIOB, E, A, B], f)
|
||||
return FIO.ChainIOK(
|
||||
MonadChain[GEA, GEB],
|
||||
FromIO[GEB],
|
||||
f,
|
||||
)
|
||||
}
|
||||
|
||||
func MonadChainFirstIOK[GEA ~func(E) GIOA, GEB ~func(E) GIOB, GIOA ~func() A, GIOB ~func() B, E, A, B any](ma GEA, f func(A) GIOB) GEA {
|
||||
return FIO.MonadChainFirstIOK(
|
||||
MonadChain[GEA, GEA],
|
||||
MonadMap[GEB, GEA],
|
||||
FromIO[GEB],
|
||||
ma, f,
|
||||
)
|
||||
}
|
||||
|
||||
func ChainFirstIOK[GEA ~func(E) GIOA, GEB ~func(E) GIOB, GIOA ~func() A, GIOB ~func() B, E, A, B any](f func(A) GIOB) func(GEA) GEA {
|
||||
return FIO.ChainFirstIOK(
|
||||
MonadChain[GEA, GEA],
|
||||
MonadMap[GEB, GEA],
|
||||
FromIO[GEB],
|
||||
f,
|
||||
)
|
||||
}
|
||||
|
||||
// Defer creates an IO by creating a brand new IO via a generator function, each time
|
||||
|
Reference in New Issue
Block a user