Skip to content

Instantly share code, notes, and snippets.

@ceedubs
Created November 20, 2014 13:17
Show Gist options
  • Save ceedubs/02a05e02acce5bb0b4f1 to your computer and use it in GitHub Desktop.
Save ceedubs/02a05e02acce5bb0b4f1 to your computer and use it in GitHub Desktop.
Contravariant[Ordering]
import scalaz._
import scala.math.Ordering
implicit val orderingContra: Contravariant[Ordering] = new Contravariant[Ordering] {
def contramap[A, B](r: Ordering[A])(f: B => A): Ordering[B] = r.on(f)
}
case class Doodad(description: String, priceCents: Int)
import scalaz.syntax.contravariant._
implicit val doodadOrdering = Ordering[Int].contramap[Doodad](_.priceCents)
// prints List(Doodad(y,75), Doodad(x,125))
println(List(Doodad("x", 125), Doodad("y", 75)).sorted)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment