Hands-on Category Theory in Scala