mirror of
https://github.com/IBM/fp-go.git
synced 2026-03-20 13:58:04 +02:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62844b7030 | ||
|
|
99a0ddd4b6 |
@@ -18,6 +18,10 @@ package readerioresult
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/IBM/fp-go/v2/array"
|
||||
"github.com/IBM/fp-go/v2/internal/witherable"
|
||||
"github.com/IBM/fp-go/v2/iterator/iter"
|
||||
"github.com/IBM/fp-go/v2/option"
|
||||
RIOR "github.com/IBM/fp-go/v2/readerioresult"
|
||||
)
|
||||
|
||||
@@ -49,3 +53,43 @@ import (
|
||||
func FilterOrElse[A any](pred Predicate[A], onFalse func(A) error) Operator[A, A] {
|
||||
return RIOR.FilterOrElse[context.Context](pred, onFalse)
|
||||
}
|
||||
|
||||
//go:inline
|
||||
func Filter[A, HKTA any](
|
||||
filter func(Predicate[A]) Endomorphism[HKTA],
|
||||
) func(Predicate[A]) Operator[HKTA, HKTA] {
|
||||
return witherable.Filter(
|
||||
Map,
|
||||
filter,
|
||||
)
|
||||
}
|
||||
|
||||
//go:inline
|
||||
func FilterArray[A any](p Predicate[A]) Operator[[]A, []A] {
|
||||
return Filter(array.Filter[A])(p)
|
||||
}
|
||||
|
||||
//go:inline
|
||||
func FilterIter[A any](p Predicate[A]) Operator[Seq[A], Seq[A]] {
|
||||
return Filter(iter.Filter[A])(p)
|
||||
}
|
||||
|
||||
//go:inline
|
||||
func FilterMap[A, B, HKTA, HKTB any](
|
||||
filter func(option.Kleisli[A, B]) Reader[HKTA, HKTB],
|
||||
) func(option.Kleisli[A, B]) Operator[HKTA, HKTB] {
|
||||
return witherable.FilterMap(
|
||||
Map,
|
||||
filter,
|
||||
)
|
||||
}
|
||||
|
||||
//go:inline
|
||||
func FilterMapArray[A, B any](p option.Kleisli[A, B]) Operator[[]A, []B] {
|
||||
return FilterMap(array.FilterMap[A, B])(p)
|
||||
}
|
||||
|
||||
//go:inline
|
||||
func FilterMapIter[A, B any](p option.Kleisli[A, B]) Operator[Seq[A], Seq[B]] {
|
||||
return FilterMap(iter.FilterMap[A, B])(p)
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ package readerioresult
|
||||
|
||||
import (
|
||||
"context"
|
||||
"iter"
|
||||
|
||||
"github.com/IBM/fp-go/v2/consumer"
|
||||
"github.com/IBM/fp-go/v2/context/ioresult"
|
||||
@@ -220,4 +221,6 @@ type (
|
||||
// The first element is the CancelFunc that should be called to release resources.
|
||||
// The second element is the new Context that was created.
|
||||
ContextCancel = Pair[context.CancelFunc, context.Context]
|
||||
|
||||
Seq[A any] = iter.Seq[A]
|
||||
)
|
||||
|
||||
15
v2/internal/filterable/types.go
Normal file
15
v2/internal/filterable/types.go
Normal file
@@ -0,0 +1,15 @@
|
||||
package filterable
|
||||
|
||||
import (
|
||||
"github.com/IBM/fp-go/v2/option"
|
||||
"github.com/IBM/fp-go/v2/pair"
|
||||
)
|
||||
|
||||
type (
|
||||
Option[A any] = option.Option[A]
|
||||
Separated[A, B any] = pair.Pair[A, B]
|
||||
|
||||
FilterType[A, HKTA any] = func(func(A) bool) func(HKTA) HKTA
|
||||
|
||||
FilterMapType[A, B, HKTA, HKTB any] = func(func(A) Option[B]) func(HKTA) HKTB
|
||||
)
|
||||
27
v2/internal/witherable/filter.go
Normal file
27
v2/internal/witherable/filter.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package witherable
|
||||
|
||||
import (
|
||||
"github.com/IBM/fp-go/v2/function"
|
||||
"github.com/IBM/fp-go/v2/internal/filterable"
|
||||
"github.com/IBM/fp-go/v2/internal/functor"
|
||||
)
|
||||
|
||||
func Filter[A, HKT_G_A, HKT_F_HKT_G_A any](
|
||||
fmap functor.MapType[HKT_G_A, HKT_G_A, HKT_F_HKT_G_A, HKT_F_HKT_G_A],
|
||||
ffilter filterable.FilterType[A, HKT_G_A],
|
||||
) func(func(A) bool) func(HKT_F_HKT_G_A) HKT_F_HKT_G_A {
|
||||
return function.Flow2(
|
||||
ffilter,
|
||||
fmap,
|
||||
)
|
||||
}
|
||||
|
||||
func FilterMap[A, B, HKT_G_A, HKT_G_B, HKT_F_HKT_G_A, HKT_F_HKT_G_B any](
|
||||
fmap functor.MapType[HKT_G_A, HKT_G_B, HKT_F_HKT_G_A, HKT_F_HKT_G_B],
|
||||
ffilter filterable.FilterMapType[A, B, HKT_G_A, HKT_G_B],
|
||||
) func(func(A) Option[B]) func(HKT_F_HKT_G_A) HKT_F_HKT_G_B {
|
||||
return function.Flow2(
|
||||
ffilter,
|
||||
fmap,
|
||||
)
|
||||
}
|
||||
1
v2/internal/witherable/partition.go
Normal file
1
v2/internal/witherable/partition.go
Normal file
@@ -0,0 +1 @@
|
||||
package witherable
|
||||
7
v2/internal/witherable/type.go
Normal file
7
v2/internal/witherable/type.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package witherable
|
||||
|
||||
import "github.com/IBM/fp-go/v2/option"
|
||||
|
||||
type (
|
||||
Option[A any] = option.Option[A]
|
||||
)
|
||||
Reference in New Issue
Block a user