monads

Monads, For Golang, Using Generics
git clone git://git.lair.cx/monads
Log | Files | Refs | README | LICENSE

commit 38d7ba562e6504dabcb4566bc898bb8104ee9323
parent d86519fe954cbeef88ccd1c96f611aeb908389d9
Author: Yongbin Kim <iam@yongbin.kim>
Date:   Mon, 10 Oct 2022 08:38:53 +0900

slices: Added MapWithError func

Signed-off-by: Yongbin Kim <iam@yongbin.kim>

Diffstat:
Mslices/map.go | 23+++++++++++++++++++++++
1 file changed, 23 insertions(+), 0 deletions(-)

diff --git a/slices/map.go b/slices/map.go @@ -8,6 +8,17 @@ func Map[T any, R any](m []T, action func(T) R) (result []R) { return } +func MapWithError[T any, R any](m []T, action func(T) (R, error)) (result []R, err error) { + result = make([]R, len(m)) + for i, item := range m { + result[i], err = action(item) + if err != nil { + return nil, err + } + } + return +} + func FlatMap[T any, R any](m []T, action func(T) []R) (result []R) { result = make([]R, 0, len(m)) for _, item := range m { @@ -15,3 +26,15 @@ func FlatMap[T any, R any](m []T, action func(T) []R) (result []R) { } return } + +func FlatMapWithError[T any, R any](m []T, action func(T) ([]R, error)) (result []R, err error) { + result = make([]R, 0, len(m)) + for _, item := range m { + items, err := action(item) + if err != nil { + return nil, err + } + result = append(result, items...) + } + return +}