mirror of
https://github.com/IBM/fp-go.git
synced 2025-11-25 22:21:49 +02:00
107 lines
3.3 KiB
Go
107 lines
3.3 KiB
Go
|
|
package readereither
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
|
||
|
|
R "github.com/ibm/fp-go/context/reader"
|
||
|
|
ET "github.com/ibm/fp-go/either"
|
||
|
|
O "github.com/ibm/fp-go/option"
|
||
|
|
RE "github.com/ibm/fp-go/readereither/generic"
|
||
|
|
)
|
||
|
|
|
||
|
|
func MakeReaderEither[A any](f func(context.Context) ET.Either[error, A]) ReaderEither[A] {
|
||
|
|
return RE.MakeReaderEither[ReaderEither[A]](f)
|
||
|
|
}
|
||
|
|
|
||
|
|
func FromEither[A any](e ET.Either[error, A]) ReaderEither[A] {
|
||
|
|
return RE.FromEither[ReaderEither[A]](e)
|
||
|
|
}
|
||
|
|
|
||
|
|
func RightReader[A any](r R.Reader[A]) ReaderEither[A] {
|
||
|
|
return RE.RightReader[R.Reader[A], ReaderEither[A]](r)
|
||
|
|
}
|
||
|
|
|
||
|
|
func LeftReader[A any](l R.Reader[error]) ReaderEither[A] {
|
||
|
|
return RE.LeftReader[R.Reader[error], ReaderEither[A]](l)
|
||
|
|
}
|
||
|
|
|
||
|
|
func Left[A any](l error) ReaderEither[A] {
|
||
|
|
return RE.Left[ReaderEither[A]](l)
|
||
|
|
}
|
||
|
|
|
||
|
|
func Right[A any](r A) ReaderEither[A] {
|
||
|
|
return RE.Right[ReaderEither[A]](r)
|
||
|
|
}
|
||
|
|
|
||
|
|
func FromReader[A any](r R.Reader[A]) ReaderEither[A] {
|
||
|
|
return RE.FromReader[R.Reader[A], ReaderEither[A]](r)
|
||
|
|
}
|
||
|
|
|
||
|
|
func MonadMap[A, B any](fa ReaderEither[A], f func(A) B) ReaderEither[B] {
|
||
|
|
return RE.MonadMap[ReaderEither[A], ReaderEither[B]](fa, f)
|
||
|
|
}
|
||
|
|
|
||
|
|
func Map[A, B any](f func(A) B) func(ReaderEither[A]) ReaderEither[B] {
|
||
|
|
return RE.Map[ReaderEither[A], ReaderEither[B]](f)
|
||
|
|
}
|
||
|
|
|
||
|
|
func MonadChain[A, B any](ma ReaderEither[A], f func(A) ReaderEither[B]) ReaderEither[B] {
|
||
|
|
return RE.MonadChain(ma, f)
|
||
|
|
}
|
||
|
|
|
||
|
|
func Chain[A, B any](f func(A) ReaderEither[B]) func(ReaderEither[A]) ReaderEither[B] {
|
||
|
|
return RE.Chain[ReaderEither[A]](f)
|
||
|
|
}
|
||
|
|
|
||
|
|
func Of[A any](a A) ReaderEither[A] {
|
||
|
|
return RE.Of[ReaderEither[A]](a)
|
||
|
|
}
|
||
|
|
|
||
|
|
func MonadAp[A, B any](fab ReaderEither[func(A) B], fa ReaderEither[A]) ReaderEither[B] {
|
||
|
|
return RE.MonadAp[ReaderEither[A], ReaderEither[B]](fab, fa)
|
||
|
|
}
|
||
|
|
|
||
|
|
func Ap[A, B any](fa ReaderEither[A]) func(ReaderEither[func(A) B]) ReaderEither[B] {
|
||
|
|
return RE.Ap[ReaderEither[A], ReaderEither[B], ReaderEither[func(A) B]](fa)
|
||
|
|
}
|
||
|
|
|
||
|
|
func FromPredicate[A any](pred func(A) bool, onFalse func(A) error) func(A) ReaderEither[A] {
|
||
|
|
return RE.FromPredicate[ReaderEither[A]](pred, onFalse)
|
||
|
|
}
|
||
|
|
|
||
|
|
func Fold[A, B any](onLeft func(error) R.Reader[B], onRight func(A) R.Reader[B]) func(ReaderEither[A]) R.Reader[B] {
|
||
|
|
return RE.Fold[ReaderEither[A]](onLeft, onRight)
|
||
|
|
}
|
||
|
|
|
||
|
|
func GetOrElse[A any](onLeft func(error) R.Reader[A]) func(ReaderEither[A]) R.Reader[A] {
|
||
|
|
return RE.GetOrElse[ReaderEither[A]](onLeft)
|
||
|
|
}
|
||
|
|
|
||
|
|
func OrElse[A any](onLeft func(error) ReaderEither[A]) func(ReaderEither[A]) ReaderEither[A] {
|
||
|
|
return RE.OrElse[ReaderEither[A]](onLeft)
|
||
|
|
}
|
||
|
|
|
||
|
|
func OrLeft[A any](onLeft func(error) R.Reader[error]) func(ReaderEither[A]) ReaderEither[A] {
|
||
|
|
return RE.OrLeft[ReaderEither[A], ReaderEither[A]](onLeft)
|
||
|
|
}
|
||
|
|
|
||
|
|
func Ask() ReaderEither[context.Context] {
|
||
|
|
return RE.Ask[ReaderEither[context.Context]]()
|
||
|
|
}
|
||
|
|
|
||
|
|
func Asks[A any](r R.Reader[A]) ReaderEither[A] {
|
||
|
|
return RE.Asks[R.Reader[A], ReaderEither[A]](r)
|
||
|
|
}
|
||
|
|
|
||
|
|
func MonadChainEitherK[A, B any](ma ReaderEither[A], f func(A) ET.Either[error, B]) ReaderEither[B] {
|
||
|
|
return RE.MonadChainEitherK[ReaderEither[A], ReaderEither[B]](ma, f)
|
||
|
|
}
|
||
|
|
|
||
|
|
func ChainEitherK[A, B any](f func(A) ET.Either[error, B]) func(ma ReaderEither[A]) ReaderEither[B] {
|
||
|
|
return RE.ChainEitherK[ReaderEither[A], ReaderEither[B]](f)
|
||
|
|
}
|
||
|
|
|
||
|
|
func ChainOptionK[A, B any](onNone func() error) func(func(A) O.Option[B]) func(ReaderEither[A]) ReaderEither[B] {
|
||
|
|
return RE.ChainOptionK[ReaderEither[A], ReaderEither[B]](onNone)
|
||
|
|
}
|