Deniz Dogan wrote:
I (too) often find myself writing code such as this:
if something
then putStrLn "howdy there!"
else if somethingElse
then putStrLn "howdy ho!"
else ...
I recall reading some tutorial about how you can use the Maybe monad
if your code starts looking like this, but as you can see, that
doesn't really apply here. "something" and "somethingElse" are simply
booleans and each of them have different actions to take if either of
them is True.
So how do I make code like this prettier?
In a similar vein:
d1x <- doesDirectoryExist d1
if d1x
then do
f1x <- doesFileExist (d1 </> f1)
if f1x
then do
d2x <- doesDirectoryExist d2
if d2x
then do
f2x <- doesFileExist (d2 </> f2)
if f2x
then do_stuff d1 d2 f1 f2
else hPutStrLn stderr $ "File " ++ f2 ++ " not found."
else hPutStrLn stderr $ "Directory " ++ d2 ++ " not found."
else hPutStrLn stderr $ "File " ++ f1 ++ " not found."
else hPutStrLn stderr $ "Directory " ++ d1 ++ " not found."
Obviously, this is nausiating. Surely we can do better somehow?
The above is a simple example. I might need to check file permissions,
invoke external programs, parse files, all sorts of things. And it might
matter which order the tests happen in. Later tests might use
information gained during earlier tests. But the recurring pattern is
"check this thing; if it passes, continue; if it fails, stop here and
emit an error message". Can we abstract this somehow?
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe