patch applied (cabal): Add two local type signatures

Ian Lynagh igloo at
Wed Jul 28 13:21:02 EDT 2010

Wed Jul 28 09:35:39 PDT 2010  simonpj at microsoft/com
  * Add two local type signatures
  I'm adding these type signatures to satisfy the "do not generalise
  local let/where" rule that GHC is taking on.
  The signatures are clearly correct, but I was surprised at the 
  polymorphism needed.  For example
  parseOptVersion :: ReadP r Version
  parseOptVersion = parseQuoted ver <++ ver
    where ver :: ReadP r Version
          ver = parse <++ return noVersion
          noVersion = Version{ versionBranch=[], versionTags=[] }
  Note that 'ver' really is called at two different types!  That 
  in turn is because of the type of (<++)
    (<++) :: ReadP a a -> ReadP r a -> ReadP r a
    (+++) :: ReadP r a -> ReadP r a -> ReadP r a
  Note the "a a" in the first arg, which is very unusual.
  For example, compare the type of (+++).
  Changing it to match the type of (+++) makes ReadP fail to compile,
  though, so I assume it's right as it stands. But surely this deserves
  a comment?!

    M ./Distribution/ParseUtils.hs -6 +9

View patch online:;a=darcs_commitdiff;h=20100728163539-5c9d7-e1a76df3cb7507cdef2e43823b977b90b4c1e54e.gz

More information about the cabal-devel mailing list