Current section

Files

Jump to
parser_gleam src fp2 monoid.gleam
Raw

src/fp2/monoid.gleam

import fp2/semigroup.{Semigroup}
import gleam/string
import gleam/list
pub type Monoid(a) {
Monoid(concat: fn(a, a) -> a, empty: a)
}
pub fn monoid_string() {
Monoid(fn(a: String, b: String) { string.concat([a, b]) }, "")
}
pub fn concat_all(m: Monoid(a)) {
fn(ass: List(a)) { list.fold(ass, m.empty, m.concat) }
}
pub fn to_semigroup(m: Monoid(a)) -> Semigroup(a) {
Semigroup(m.concat)
}
pub fn from_semigroup(s: Semigroup(a), empty: a) -> Monoid(a) {
Monoid(s.concat, empty)
}