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