Haskell Language Generalized Algebraic Data Types