exitSuccess :: IO a means that exitSuccess type-checks for any `a`. Your program should typecheck without `void`. I suspect you've got a stray paren.

This prints "Bailing out." and exits zero for me:

module Main where

import System.Exit (exitSuccess)
import Control.Monad (when)

main = do
    let condition = True
    when condition (putStrLn "Bailing out." >> exitSuccess)
    putStrLn "Continuing normally..."


On Tue, 9 Jun 2015 at 08:27 Sumit Sahrawat, Maths & Computing, IIT (BHU) <sumit.sahrawat.apm13@iitbhu.ac.in> wrote:
Try `Control.Monad.void`. It is equivalent of adding `>> return ()` to the end of a block.

void $ do
 ...

On 9 June 2015 at 20:55, Vale Cofer-Shabica <vale.cofershabica@gmail.com> wrote:
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
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners



--
Regards

Sumit Sahrawat
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners