1
0
mirror of https://github.com/IBM/fp-go.git synced 2025-12-09 23:11:40 +02:00

Compare commits

...

1 Commits

Author SHA1 Message Date
Carsten Leue
1a89ec3df7 fix: implement Sequence for Pair
Signed-off-by: Carsten Leue <carsten.leue@de.ibm.com>
2025-11-28 11:22:23 +01:00

48
v2/pair/sequence.go Normal file
View 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))
}
}
}