package blitz.func fun Monad>.reduce(operation: (acc: S, T) -> S): Monad = bind { it.reduce(operation) } fun Monad>.reduceIter(operation: (acc: S, T) -> S): Monad = bind { it.reduce(operation) } fun Monad>.reduce(each: (T) -> Unit): Monad = Monad { this@reduce.impure().forEach { each(it) } } fun Monad>.reduceIter(each: (T) -> Unit): Monad = Monad { this@reduceIter.impure().forEach { each(it) } }