[Haskell-cafe] How does one read complicated type signatures?