diff --git a/di/erasure/provider.go b/di/erasure/provider.go index 6c646f6..437fd34 100644 --- a/di/erasure/provider.go +++ b/di/erasure/provider.go @@ -117,7 +117,7 @@ var ( mp, R.Map[int](F.Flow3( getAt(res), - IOO.FromIOEither[error, any], + IOE.ToIOOption[error, any], F.ToAny[IOO.IOOption[any]], )), IOE.Of[error, paramValue], diff --git a/ioeither/generic/ioeither.go b/ioeither/generic/ioeither.go index 56a05e4..690b1e7 100644 --- a/ioeither/generic/ioeither.go +++ b/ioeither/generic/ioeither.go @@ -336,3 +336,14 @@ func MonadFlap[GEAB ~func() ET.Either[E, func(A) B], GEB ~func() ET.Either[E, B] func Flap[GEAB ~func() ET.Either[E, func(A) B], GEB ~func() ET.Either[E, B], E, B, A any](a A) func(GEAB) GEB { return FC.Flap(MonadMap[GEAB, GEB], a) } + +func ToIOOption[GA ~func() O.Option[A], GEA ~func() ET.Either[E, A], E, A any](ioe GEA) GA { + return F.Pipe1( + ioe, + IO.Map[GEA, GA](ET.ToOption[E, A]), + ) +} + +func FromIOOption[GEA ~func() ET.Either[E, A], GA ~func() O.Option[A], E, A any](onNone func() E) func(ioo GA) GEA { + return IO.Map[GA, GEA](ET.FromOption[A](onNone)) +} diff --git a/ioeither/ioeither.go b/ioeither/ioeither.go index a86ed9a..3bae10c 100644 --- a/ioeither/ioeither.go +++ b/ioeither/ioeither.go @@ -19,6 +19,7 @@ import ( ET "github.com/IBM/fp-go/either" I "github.com/IBM/fp-go/io" G "github.com/IBM/fp-go/ioeither/generic" + IOO "github.com/IBM/fp-go/iooption" L "github.com/IBM/fp-go/lazy" O "github.com/IBM/fp-go/option" ) @@ -63,6 +64,10 @@ func FromOption[A, E any](onNone func() E) func(o O.Option[A]) IOEither[E, A] { return G.FromOption[IOEither[E, A]](onNone) } +func FromIOOption[A, E any](onNone func() E) func(o IOO.IOOption[A]) IOEither[E, A] { + return G.FromIOOption[IOEither[E, A], IOO.IOOption[A]](onNone) +} + func ChainOptionK[A, B, E any](onNone func() E) func(func(A) O.Option[B]) func(IOEither[E, A]) IOEither[E, B] { return G.ChainOptionK[IOEither[E, A], IOEither[E, B]](onNone) } @@ -266,3 +271,8 @@ func MonadFlap[E, B, A any](fab IOEither[E, func(A) B], a A) IOEither[E, B] { func Flap[E, B, A any](a A) func(IOEither[E, func(A) B]) IOEither[E, B] { return G.Flap[IOEither[E, func(A) B], IOEither[E, B]](a) } + +// ToIOOption converts an [IOEither] to an [IOO.IOOption] +func ToIOOption[E, A any](ioe IOEither[E, A]) IOO.IOOption[A] { + return G.ToIOOption[IOO.IOOption[A]](ioe) +} diff --git a/iooption/generic/iooption.go b/iooption/generic/iooption.go index 6918d47..75fd798 100644 --- a/iooption/generic/iooption.go +++ b/iooption/generic/iooption.go @@ -64,13 +64,6 @@ func FromEither[GA ~func() O.Option[A], E, A any](e ET.Either[E, A]) GA { ) } -func FromIOEither[GA ~func() O.Option[A], GEA ~func() ET.Either[E, A], E, A any](ioe GEA) GA { - return F.Pipe1( - ioe, - IO.Map[GEA, GA](ET.ToOption[E, A]), - ) -} - func MonadMap[GA ~func() O.Option[A], GB ~func() O.Option[B], A, B any](fa GA, f func(A) B) GB { return optiont.MonadMap(IO.MonadMap[GA, GB, O.Option[A], O.Option[B]], fa, f) } diff --git a/iooption/iooption.go b/iooption/iooption.go index fe5eb44..952e621 100644 --- a/iooption/iooption.go +++ b/iooption/iooption.go @@ -18,7 +18,6 @@ package iooption import ( ET "github.com/IBM/fp-go/either" I "github.com/IBM/fp-go/io" - IOE "github.com/IBM/fp-go/ioeither" G "github.com/IBM/fp-go/iooption/generic" O "github.com/IBM/fp-go/option" ) @@ -129,11 +128,6 @@ func Defer[A any](gen func() IOOption[A]) IOOption[A] { return G.Defer[IOOption[A]](gen) } -// FromIOEither converts an [IOEither] into an [IOOption] -func FromIOEither[E, A any](ioe IOE.IOEither[E, A]) IOOption[A] { - return G.FromIOEither[IOOption[A]](ioe) -} - // FromEither converts an [Either] into an [IOOption] func FromEither[E, A any](e ET.Either[E, A]) IOOption[A] { return G.FromEither[IOOption[A]](e) diff --git a/samples/tuples/option_test.go b/samples/tuples/option_test.go index d1ccd55..6d961f4 100644 --- a/samples/tuples/option_test.go +++ b/samples/tuples/option_test.go @@ -52,7 +52,7 @@ func TestIOEitherToOption2(t *testing.T) { content, IOEF.WriteFile(filepath.Join(tmpDir, "test.txt"), os.ModePerm), IOE.Swap[error, []byte], - IOO.FromIOEither[[]byte, error], + IOE.ToIOOption[[]byte, error], ) fmt.Println(resIOO())