[Haskell-cafe] generic way to construct and deconstruct a newtype