Apply instance
Apply instance
This means that we can write:
val mean: Fold[Int, Int] = (sum |@| count)(_ / _)
An Apply instance is also a Functor instance so we can write:
val meanTimes2 = mean.map(_ * 2)
Cobind instance
A Fold can be turned into a Compose
A Fold can be turned into a Compose
This allows us to write:
val scans = sum compose list
Profunctor instance
Profunctor instance
This is especially useful because we can "map" on the input element
val doubleSum = fromMonoid[Double] // sum all elements val roundedDoubleSum = doubleSum.mapfst(_.round)