blob: 504f41f587afd2e4e53f178aaf5b34b197c56b2e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
(.module:
[lux #*]
[//
[monoid (#+ Monoid)]])
(signature: #export (Fold F)
{#.doc "Iterate over a structure's values to build a summary value."}
(: (All [a b]
(-> (-> b a a) a (F b) a))
fold))
(def: #export (with-monoid monoid fold value)
(All [F a]
(-> (Monoid a) (Fold F) (F a) a))
(let [(^open "monoid;.") monoid]
(fold monoid;compose
monoid;identity
value)))
|