Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import cats.Monoid
- import cats.Semigroup
- import cats.instances.int._
- import cats.instances.option._
- import cats.syntax.semigroup._
- case class Order(totalCost: Double, quantity: Double)
- implicit def orderMonoid: Monoid[Order] = new Monoid[Order] {
- def empty: Order = Order(0, 0)
- def combine(x: Order, y: Order): Order =
- Order(x.totalCost + y.totalCost, x.quantity + y.quantity)
- }
- def addCats[A: Monoid](items: List[A]): A =
- items.foldLeft(Monoid[A].empty)(_ |+| _)
- addCats(List(1, 2, 3, 4, 5))
- addCats(List(Option(1), Option(2), None, Option(3), None, Option(4), Option(5)))
- val order1 = Order(2.5, 1)
- val order2 = Order(3.5, 2)
- val order3 = Order(4.0, 3)
- addCats(List[Order](order1, order2, order3))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement