Slide 18
Slide 18 text
Trans Scala code
trait MyMonoid[A] {
def add(x: A, y: A): A
def unit: A
}
implicit object intMonoid extends MyMonoid[Int] {
def add(x : Int, y : Int): Int = x + y
def unit: Int = 0
}
implicit object doubleMonoid extends MyMonoid[Double] {
def add(x : Double, y : Double): Double = x + y
def unit: Double = 0
}
def mySum[A](x: A, y: A)(implicit m : MyMonoid[A]): A = m.add(x, y)
mySum(1, 2) // => 3
mySum(1.0, 2.0) // => 3.0
mysum(true, false) // Compile error