type IOE a = IO a

IOE used to be a monad with extra error handling built on top of the IO monad,
But the IO monad already supports error handling, so this construction was a
superfluous.

The new 'instance ErrorMonad IOE' is defined to preserve the previous error
handling behaviour, i.e. the function 'handle' only catches errors thrown with
'raise' (or 'fail') and not other errors in the IO monad.
This commit is contained in:
hallgren
2014-10-20 19:32:46 +00:00
parent 55aebadd5a
commit 8337a19b40
2 changed files with 23 additions and 15 deletions

View File

@@ -79,7 +79,7 @@ batchCompile1 lib_dir (opts,filepaths) =
deps <- newMVar M.empty
toLog <- newLog runIOE
let --logStrLn = toLog . ePutStrLn
ok :: CollectOutput IOE a -> IO a
--ok :: CollectOutput IO a -> IO a
ok (CO m) = err bad good =<< appIOE m
where
good (o,r) = do toLog o; return r