równoległe „Składanie” w Haskell

Mam funkcję z poniższym typem:

union :: a -> a -> a

Ia maaddytywność własność. Więc możemy to uznaćunion jako wersja(+)

Powiedzmy, że mamy[a]i chcesz wykonać równoległe"folding", w przypadku składania nierównoległego możemy zrobić tylko:

foldl1' union [a]

Ale jak to zrobić równolegle? Mogę pokazać problemNum wartości i(+) funkcjonować.

Na przykład mamy listę[1,2,3,4,5,6] i(+) Równolegle powinniśmy się podzielić

[1,2,3] (+) [4,5,6]
[1,2] (+) [3] (+) [4,5] (+) [6]
([1] (+) [2]) (+) ([3] (+) [4]) (+) ([5] (+) [6])

potem każdy(+) Operacja, którą chcemy wykonać równolegle i połączyć, aby odpowiedzieć

[3] (+) [7] (+) [11] = 21

Zauważ, że dzielimy listę lub wykonujemy operacje w dowolnej kolejności, z powodua addytywność.

Czy można to zrobić za pomocą dowolnej standardowej biblioteki?

questionAnswers(2)

yourAnswerToTheQuestion