@@ -17,6 +17,7 @@ package generic
1717
1818import  (
1919	ET "github.com/IBM/fp-go/either" 
20+ 	"github.com/IBM/fp-go/internal/functor" 
2021	"github.com/IBM/fp-go/internal/monad" 
2122	"github.com/IBM/fp-go/internal/pointed" 
2223)
@@ -25,6 +26,8 @@ type ioEitherPointed[E, A any, GA ~func() ET.Either[E, A]] struct{}
2526
2627type  ioEitherMonad [E , A , B  any , GA  ~ func () ET.Either [E , A ], GB  ~ func () ET.Either [E , B ], GAB  ~ func () ET.Either [E , func (A ) B ]] struct {}
2728
29+ type  ioEitherFunctor [E , A , B  any , GA  ~ func () ET.Either [E , A ], GB  ~ func () ET.Either [E , B ]] struct {}
30+ 
2831func  (o  * ioEitherPointed [E , A , GA ]) Of (a  A ) GA  {
2932	return  Of [GA , E , A ](a )
3033}
@@ -45,11 +48,20 @@ func (o *ioEitherMonad[E, A, B, GA, GB, GAB]) Ap(fa GA) func(GAB) GB {
4548	return  Ap [GB , GAB , GA , E , A , B ](fa )
4649}
4750
51+ func  (o  * ioEitherFunctor [E , A , B , GA , GB ]) Map (f  func (A ) B ) func (GA ) GB  {
52+ 	return  Map [GA , GB , E , A , B ](f )
53+ }
54+ 
4855// Pointed implements the pointed operations for [IOEither] 
4956func  Pointed [E , A  any , GA  ~ func () ET.Either [E , A ]]() pointed.Pointed [A , GA ] {
5057	return  & ioEitherPointed [E , A , GA ]{}
5158}
5259
60+ // Functor implements the monadic operations for [IOEither] 
61+ func  Functor [E , A , B  any , GA  ~ func () ET.Either [E , A ], GB  ~ func () ET.Either [E , B ]]() functor.Functor [A , B , GA , GB ] {
62+ 	return  & ioEitherFunctor [E , A , B , GA , GB ]{}
63+ }
64+ 
5365// Monad implements the monadic operations for [IOEither] 
5466func  Monad [E , A , B  any , GA  ~ func () ET.Either [E , A ], GB  ~ func () ET.Either [E , B ], GAB  ~ func () ET.Either [E , func (A ) B ]]() monad.Monad [A , B , GA , GB , GAB ] {
5567	return  & ioEitherMonad [E , A , B , GA , GB , GAB ]{}
0 commit comments