Typing rules for Haskell