building new data types in haskell