diff options
author | Joey Hess <joey@kitenet.net> | 2013-09-27 19:52:36 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-09-27 19:52:36 -0400 |
commit | cbf810a421901e76ee2d3e18592fb4d39de851a6 (patch) | |
tree | 222eb2bedae5ddd3703d611a5b31a5b396dca75f /Utility | |
parent | 7d1b396cc863fb93869b7358dcfe1908985a21b8 (diff) |
clean up some ugly code
Diffstat (limited to 'Utility')
-rw-r--r-- | Utility/Data.hs | 17 | ||||
-rw-r--r-- | Utility/Exception.hs | 3 | ||||
-rw-r--r-- | Utility/Misc.hs | 6 |
3 files changed, 19 insertions, 7 deletions
diff --git a/Utility/Data.hs b/Utility/Data.hs new file mode 100644 index 000000000..359258296 --- /dev/null +++ b/Utility/Data.hs @@ -0,0 +1,17 @@ +{- utilities for simple data types + - + - Copyright 2013 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Utility.Data where + +{- First item in the list that is not Nothing. -} +firstJust :: Eq a => [Maybe a] -> Maybe a +firstJust ms = case dropWhile (== Nothing) ms of + [] -> Nothing + (md:_) -> md + +eitherToMaybe :: Either a b -> Maybe b +eitherToMaybe = either (const Nothing) Just diff --git a/Utility/Exception.hs b/Utility/Exception.hs index 3835d741d..cf2c615c7 100644 --- a/Utility/Exception.hs +++ b/Utility/Exception.hs @@ -14,6 +14,7 @@ import qualified Control.Exception as E import Control.Applicative import Control.Monad import System.IO.Error (isDoesNotExistError) +import Utility.Data {- Catches IO errors and returns a Bool -} catchBoolIO :: IO Bool -> IO Bool @@ -54,5 +55,5 @@ tryNonAsync a = (Right <$> a) `catchNonAsync` (return . Left) {- Catches only DoesNotExist exceptions, and lets all others through. -} tryWhenExists :: IO a -> IO (Maybe a) -tryWhenExists a = either (const Nothing) Just <$> +tryWhenExists a = eitherToMaybe <$> tryJust (guard . isDoesNotExistError) a diff --git a/Utility/Misc.hs b/Utility/Misc.hs index 48ce4c929..804a9e487 100644 --- a/Utility/Misc.hs +++ b/Utility/Misc.hs @@ -91,12 +91,6 @@ massReplace vs = go [] vs go (replacement:acc) vs (drop (length val) s) | otherwise = go acc rest s -{- First item in the list that is not Nothing. -} -firstJust :: Eq a => [Maybe a] -> Maybe a -firstJust ms = case dropWhile (== Nothing) ms of - [] -> Nothing - (md:_) -> md - {- Given two orderings, returns the second if the first is EQ and returns - the first otherwise. - |