Haskell: How to extend a base type using data, value constructors, record syntax, and deriving Read more