Jannis
03/29/2019, 11:37 AMinline class All(val getAll: Boolean) {
companion object {
fun monoid(): Monoid<All> = object: AllMonoid {}
}
}
interface AllMonoid : Monoid<All> {
override fun empty(): All = All(true)
override fun All.combine(b: All): All = All(getAll && b.getAll)
}
inline class Any(val getAll: Boolean) {
companion object {
fun monoid(): Monoid<Any> = object: AnyMonoid {}
}
}
interface AnyMonoid : Monoid<Any> {
override fun empty(): Any = Any(true)
override fun Any.combine(b: Any): Any = Any(getAll || b.getAll)
}