Neil Mitchell wrote:
* abort - deliberate aborting because the user made some mistake.
 This is an exception. The signature of a function must reflect this by a
Maybe, Either type etc.

Disagree. I mean more like:

when (Delete `elem` flags && Keep `elem` flags) $
   abort "User cannot pick both keep and delete on the command line"

Think "die" in Perl world.

in that case should use abort :: String -> IO a, not abort :: String -> a. "abort" as "pure function" is just for messy scripting convenience a-la Perl. (Which is not to say that's never useful, of course -- I would just try my hardest to avoid it in my code, probably.)

On the other hand, Control.Exception.throw, if it's ever useful, obviously isn't meant to indicate a programmer error, but to throw an exception (that will probably be caught somewhere in the program's IO). So there's a reason for _|_ besides programmer error (well, there's also user-driven nontermination such as when an interpreter is told to execute an infinite loop :-)

-Isaac
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to