Used type classes to factor out the concern of pretty printing model objects. Go Scala!