
Dear all, I'm writing a command line program which may need to exit early based on some condition. Because of the pipeline the program is a part of, I want to be able to control the exit status when it does terminate. I can successfully use 'error' to indicate failure, but also want to exit early with success (or any other status). Here's what I've managed:
import System.Exit (exitSuccess) import Control.Monad (when)
main = do
... code to reasonably initialize condition, e.g.:
let condition = True when condition (putStrLn "Bailing out.")>>exitSuccess>>(return ())
... program continues If I remove ">>(return ())" my code will not typecheck because "exitSuccess :: IO a". But this looks ugly and smells sufficiently like a kludge that I presume there is a better way to do it. Any suggestions appreciated, vale