mirror of
https://github.com/IBM/fp-go.git
synced 2025-12-09 23:11:40 +02:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a89ec3df7 |
48
v2/pair/sequence.go
Normal file
48
v2/pair/sequence.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package pair
|
||||
|
||||
import "github.com/IBM/fp-go/v2/function"
|
||||
|
||||
func MonadSequence[L, A, HKTA, HKTPA any](
|
||||
mmap func(HKTA, Kleisli[L, A, A]) HKTPA,
|
||||
fas Pair[L, HKTA],
|
||||
) HKTPA {
|
||||
return mmap(Tail(fas), FromHead[A](Head(fas)))
|
||||
}
|
||||
|
||||
func MonadTraverse[L, A, HKTA, HKTPA any](
|
||||
mmap func(HKTA, Kleisli[L, A, A]) HKTPA,
|
||||
f func(A) HKTA,
|
||||
fas Pair[L, A],
|
||||
) HKTPA {
|
||||
return mmap(f(Tail(fas)), FromHead[A](Head(fas)))
|
||||
}
|
||||
|
||||
func Sequence[L, A, HKTA, HKTPA any](
|
||||
mmap func(Kleisli[L, A, A]) func(HKTA) HKTPA,
|
||||
) func(Pair[L, HKTA]) HKTPA {
|
||||
fh := function.Flow2(
|
||||
Head[L, HKTA],
|
||||
FromHead[A, L],
|
||||
)
|
||||
return func(fas Pair[L, HKTA]) HKTPA {
|
||||
return mmap(fh(fas))(Tail(fas))
|
||||
}
|
||||
}
|
||||
|
||||
func Traverse[L, A, HKTA, HKTPA any](
|
||||
mmap func(Kleisli[L, A, A]) func(HKTA) HKTPA,
|
||||
) func(func(A) HKTA) func(Pair[L, A]) HKTPA {
|
||||
fh := function.Flow2(
|
||||
Head[L, A],
|
||||
FromHead[A, L],
|
||||
)
|
||||
return func(f func(A) HKTA) func(Pair[L, A]) HKTPA {
|
||||
ft := function.Flow2(
|
||||
Tail[L, A],
|
||||
f,
|
||||
)
|
||||
return func(fas Pair[L, A]) HKTPA {
|
||||
return mmap(fh(fas))(ft(fas))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user