Pure Types in Haskell