[Hackage] #510: Don't call exitWith on parse error, instead return error or throw exception

Hackage trac at galois.com
Fri Feb 27 10:46:55 EST 2009

#510: Don't call exitWith on parse error, instead return error or throw exception
  Reporter:  guest          |        Owner:         
      Type:  enhancement    |       Status:  closed 
  Priority:  normal         |    Milestone:         
 Component:  Cabal library  |      Version:
  Severity:  minor          |   Resolution:  invalid
  Keywords:                 |   Difficulty:  unknown
Ghcversion:                 |     Platform:         
Changes (by duncan):

  * status:  new => closed
  * resolution:  => invalid


 If you want to handle the parse errors you can use:
 parsePackageDescription :: String -> ParseResult GenericPackageDescription
 The `ParseResult` gives you everything about the parsing outcome. It
 includes a structured description of any parse error or warnings. There
 are functions provided to format these errors and warnings into strings if
 you don't want to handle them individually.

 By contrast, `readPackageDescription` is an "all in one" convenience
 function that works in IO, reads the file and throws exceptions in IO if
 reading the file or parsing it fails.
 readPackageDescription :: Verbosity -> FilePath -> IO

 Admitedly, it does use the wrong exception if parsing fails, it uses the
 `ExitWith` exception where it should use `UserError`. It is still
 catchable however. But you clearly don't want to be using exceptions here,
 you want to use the pure function `parsePackageDescription` that gives you
 the chance to handle parse errors yourself.

 I'm closing this ticket but opening a new one about the issue with `die`
 throwing the wrong kind of exception.

Ticket URL: <http://hackage.haskell.org/trac/hackage/ticket/510#comment:2>
Hackage <http://haskell.org/cabal/>
Hackage: Cabal and related projects

More information about the cabal-devel mailing list