mirror of
https://github.com/IBM/fp-go.git
synced 2025-08-10 22:31:32 +02:00
fix: remove unnecesary indirection in E.TryCatch
Signed-off-by: Dr. Carsten Leue <carsten.leue@de.ibm.com>
This commit is contained in:
@@ -120,16 +120,15 @@ func Flatten[E, A any](mma Either[E, Either[E, A]]) Either[E, A] {
|
||||
return MonadChain(mma, F.Identity[Either[E, A]])
|
||||
}
|
||||
|
||||
func TryCatch[FA ~func() (A, error), FE func(error) E, E, A any](f FA, onThrow FE) Either[E, A] {
|
||||
val, err := f()
|
||||
func TryCatch[FE func(error) E, E, A any](val A, err error, onThrow FE) Either[E, A] {
|
||||
if err != nil {
|
||||
return F.Pipe2(err, onThrow, Left[A, E])
|
||||
}
|
||||
return F.Pipe1(val, Right[E, A])
|
||||
}
|
||||
|
||||
func TryCatchError[F ~func() (A, error), A any](f F) Either[error, A] {
|
||||
return TryCatch(f, E.IdentityError)
|
||||
func TryCatchError[A any](val A, err error) Either[error, A] {
|
||||
return TryCatch(val, err, E.IdentityError)
|
||||
}
|
||||
|
||||
func Sequence2[E, T1, T2, R any](f func(T1, T2) Either[E, R]) func(Either[E, T1], Either[E, T2]) Either[E, R] {
|
||||
@@ -154,9 +153,7 @@ func ToOption[E, A any](ma Either[E, A]) O.Option[A] {
|
||||
|
||||
func FromError[A any](f func(a A) error) func(A) Either[error, A] {
|
||||
return func(a A) Either[error, A] {
|
||||
return TryCatchError(func() (A, error) {
|
||||
return a, f(a)
|
||||
})
|
||||
return TryCatchError(a, f(a))
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -32,7 +32,5 @@ var (
|
||||
)
|
||||
|
||||
func command(name string, args []string, in []byte) E.Either[error, exec.CommandOutput] {
|
||||
return E.TryCatchError(func() (exec.CommandOutput, error) {
|
||||
return GE.Exec(context.Background(), name, args, in)
|
||||
})
|
||||
return E.TryCatchError(GE.Exec(context.Background(), name, args, in))
|
||||
}
|
||||
|
927
either/gen.go
927
either/gen.go
File diff suppressed because it is too large
Load Diff
@@ -35,17 +35,13 @@ var (
|
||||
func bodyRequest(method string) func(string) func([]byte) E.Either[error, *http.Request] {
|
||||
return func(url string) func([]byte) E.Either[error, *http.Request] {
|
||||
return func(body []byte) E.Either[error, *http.Request] {
|
||||
return E.TryCatchError(func() (*http.Request, error) {
|
||||
return http.NewRequest(method, url, bytes.NewReader(body))
|
||||
})
|
||||
return E.TryCatchError(http.NewRequest(method, url, bytes.NewReader(body)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func noBodyRequest(method string) func(string) E.Either[error, *http.Request] {
|
||||
return func(url string) E.Either[error, *http.Request] {
|
||||
return E.TryCatchError(func() (*http.Request, error) {
|
||||
return http.NewRequest(method, url, nil)
|
||||
})
|
||||
return E.TryCatchError(http.NewRequest(method, url, nil))
|
||||
}
|
||||
}
|
||||
|
@@ -25,20 +25,14 @@ import (
|
||||
|
||||
func TestWithResource(t *testing.T) {
|
||||
onCreate := func() Either[error, *os.File] {
|
||||
return TryCatchError(func() (*os.File, error) {
|
||||
return os.CreateTemp("", "*")
|
||||
})
|
||||
return TryCatchError(os.CreateTemp("", "*"))
|
||||
}
|
||||
onDelete := F.Flow2(
|
||||
func(f *os.File) Either[error, string] {
|
||||
return TryCatchError(func() (string, error) {
|
||||
return f.Name(), f.Close()
|
||||
})
|
||||
return TryCatchError(f.Name(), f.Close())
|
||||
},
|
||||
Chain(func(name string) Either[error, any] {
|
||||
return TryCatchError(func() (any, error) {
|
||||
return name, os.Remove(name)
|
||||
})
|
||||
return TryCatchError(any(name), os.Remove(name))
|
||||
}),
|
||||
)
|
||||
|
||||
|
@@ -17,80 +17,60 @@ package either
|
||||
|
||||
func Variadic0[V, R any](f func([]V) (R, error)) func(...V) Either[error, R] {
|
||||
return func(v ...V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(v)
|
||||
})
|
||||
return TryCatchError(f(v))
|
||||
}
|
||||
}
|
||||
|
||||
func Variadic1[T1, V, R any](f func(T1, []V) (R, error)) func(T1, ...V) Either[error, R] {
|
||||
return func(t1 T1, v ...V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, v)
|
||||
})
|
||||
return TryCatchError(f(t1, v))
|
||||
}
|
||||
}
|
||||
|
||||
func Variadic2[T1, T2, V, R any](f func(T1, T2, []V) (R, error)) func(T1, T2, ...V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, v ...V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, v)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, v))
|
||||
}
|
||||
}
|
||||
|
||||
func Variadic3[T1, T2, T3, V, R any](f func(T1, T2, T3, []V) (R, error)) func(T1, T2, T3, ...V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, t3 T3, v ...V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, t3, v)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, t3, v))
|
||||
}
|
||||
}
|
||||
|
||||
func Variadic4[T1, T2, T3, T4, V, R any](f func(T1, T2, T3, T4, []V) (R, error)) func(T1, T2, T3, T4, ...V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4, v ...V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, t3, t4, v)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, t3, t4, v))
|
||||
}
|
||||
}
|
||||
|
||||
func Unvariadic0[V, R any](f func(...V) (R, error)) func([]V) Either[error, R] {
|
||||
return func(v []V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(v...)
|
||||
})
|
||||
return TryCatchError(f(v...))
|
||||
}
|
||||
}
|
||||
|
||||
func Unvariadic1[T1, V, R any](f func(T1, ...V) (R, error)) func(T1, []V) Either[error, R] {
|
||||
return func(t1 T1, v []V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, v...)
|
||||
})
|
||||
return TryCatchError(f(t1, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func Unvariadic2[T1, T2, V, R any](f func(T1, T2, ...V) (R, error)) func(T1, T2, []V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, v []V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, v...)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func Unvariadic3[T1, T2, T3, V, R any](f func(T1, T2, T3, ...V) (R, error)) func(T1, T2, T3, []V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, t3 T3, v []V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, t3, v...)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, t3, v...))
|
||||
}
|
||||
}
|
||||
|
||||
func Unvariadic4[T1, T2, T3, T4, V, R any](f func(T1, T2, T3, T4, ...V) (R, error)) func(T1, T2, T3, T4, []V) Either[error, R] {
|
||||
return func(t1 T1, t2 T2, t3 T3, t4 T4, v []V) Either[error, R] {
|
||||
return TryCatchError(func() (R, error) {
|
||||
return f(t1, t2, t3, t4, v...)
|
||||
})
|
||||
return TryCatchError(f(t1, t2, t3, t4, v...))
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user