Abstract Algebra for Scala