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