Quick actions

cmd+k|ctrl+k

Navigation

Languages

Monoids in Clojure

Snippet info

Language

Clojure

Visibility

public

Author

rightfold

Created

2017-05-22T13:48:26Z

Updated

2017-06-08T10:18:47Z

(defn semigroup [append]
  {::append append})

(defn monoid [semigroup empty]
  (assoc semigroup ::empty empty))

(defn append [semigroup a b]
  ((::append semigroup) a b))

(defn concat [monoid xs]
  (reduce (::append monoid) (::empty monoid) xs))

(def semigroup-add
  (semigroup +))

(def monoid-add
  (monoid semigroup-add 0))

(prn (concat monoid-add [1 2 3]))
INFO