[Haskell] Why Does This Typecheck?