A Scala implementation of a calculator to illustrate Functional Programming concepts like ADTs, Implicits and Typeclasses