On Jun 21, 2009, at 2:36 PM, Sebastian Fischer wrote:
On Jun 21, 2009, at 11:52 AM, Andrew Coppin wrote:
...

When using

failUnless boolAction message = lift boolAction >>= (`unless`fail message)

the code becomes

either (hPutStrLn stderr) return =<< runErrorT $
do failUnless (doesDirectoryExist d1) $ "Directory " ++ d1 ++ " not found." failUnless (doesFileExist (d1 </> f1)) $ "File " ++ f1 ++ " not found." failUnless (doesDirectoryExist d2) $ "Directory " ++ d2 ++ " not found." failUnless (doesFileExist (d2 </> f2)) $ "File " ++ f2 ++ " not found."
    lift $ doStuff d1 d2 f1 f2

Or make is somewhat prettier (imho) using infix:

orError boolAction message = lift boolAction >>= (`unless`fail message)

either (hPutStrLn stderr) return =<< runErrorT $
do doesDirectoryExist d1 `orError` ("Directory " ++ d1 ++ " not found.") doesFileExist (d1 </> f1) `orError` ("File " ++ f1 ++ " not found.") doesDirectoryExist d2 `orError` ("Directory " ++ d2 ++ " not found.") doesFileExist (d2 </> f2) `orError` ("File " ++ f2 ++ " not found.")
    lift $ doStuff d1 d2 f1 f2

It's similar to Claus's proposal to use MaybeT with additional support for error messages.

Sebastian


--
Underestimating the novelty of the future is a time-honored tradition.
(D.G.)

--
Sebastiaan Visser

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

Reply via email to