Explain Contramap
scala
Solution
If you look at the following `Ordering.on` method of the standard library:
def on[U](f: U => T): Ordering[U]
You'll see that `on` transforms an `Ordering[T]` into an `Ordering[U]` while taking a function from `U` to `T`. So the method `on` witnesses the fact that `Ordering` can be seen as a `Contravariant` functor with:
def contramap[A, B](f: B => A) = (fa: Ordering[A]) => fa.on(f)
I also saw the blog post from Tony and it helped me finally makes sense of this three year old answer from retronym to one of my question.
Problem
Can someone explain `contramap` to me? What would this implementation look like? What would good examples of usage look like? ``` // contravariant functor trait Contravariant[F[_]] { def contramap[A, B](f: B => A): F[A] => F[B] } ``` Source: http://tmorris.net/posts/functors-and-things-using-scala/index.html