use Option.map vs case Some(val)
use map and getOrElse vs case Some/None
add ()'s to tidy up compiler warning
add test for removing redundant info from toString
use foldRight vs complex if else block when building toString