aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/abstract/mix.lux
blob: 53e6fbcf8cf062a4ee29136d42f99f40699f6de6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(.module:
  [library
   [lux "*"]]
  [//
   [monoid {"+" [Monoid]}]])

(type: .public (Mix F)
  (Interface
   (: (All (_ a b)
        (-> (-> b a a) a (F b) a))
      mix)))

(def: .public (with_monoid monoid mix value)
  (All (_ F a)
    (-> (Monoid a) (Mix F) (F a) a))
  (let [(^open "/\[0]") monoid]
    (mix /\composite /\identity value)))