
Bryan Vicknair
writes:
Is there any way to get closer to the following? I think this is much clearer, but perhaps I'm missing a much larger point in how this should be done in Haskell::
createDb fpath = do checkFileExists fpath checkParentDirExists fpath con <- openCon (Config fpath) create con closeCon con
Here is one way: {-# LANGUAGE DeriveDataTypeable #-} import Control.Applicative import Control.Exception import Control.Monad import Control.Monad.Trans.Error import Data.Data import Data.Typeable import System.Directory data ConfirmationFailed = ConfirmationFailed String deriving (Show, Data, Typeable) instance Exception ConfirmationFailed confirm desc test = do result <- test unless result $ throwIO (ConfirmationFailed desc) main = do confirm "/tmp exists" (doesDirectoryExist "/tmp") print "hello" confirm "/tmpx exists" (doesDirectoryExist "/tmpx") print "hello" You can also use "assert" or "guard" for this, although neither will be as descriptive. -- John Wiegley FP Complete Haskell tools, training and consulting http://fpcomplete.com johnw on #haskell/irc.freenode.net