lib: Replace some utility functions with library functions.
This commit is contained in:
		
							parent
							
								
									0ddb5fa4e3
								
							
						
					
					
						commit
						702c958487
					
				| @ -84,6 +84,7 @@ import Control.Applicative.Permutations | |||||||
| import Control.Monad (guard, unless) | import Control.Monad (guard, unless) | ||||||
| import "base-compat-batteries" Data.List.Compat | import "base-compat-batteries" Data.List.Compat | ||||||
| import Data.Default | import Data.Default | ||||||
|  | import Data.Foldable (asum) | ||||||
| import Data.Maybe | import Data.Maybe | ||||||
| import qualified Data.Set as Set | import qualified Data.Set as Set | ||||||
| import Data.Text (Text) | import Data.Text (Text) | ||||||
| @ -654,7 +655,7 @@ advancetonthweekday n wd s = | |||||||
| 
 | 
 | ||||||
| -- -- | Parse a couple of date-time string formats to a time type. | -- -- | Parse a couple of date-time string formats to a time type. | ||||||
| -- parsedatetimeM :: String -> Maybe LocalTime | -- parsedatetimeM :: String -> Maybe LocalTime | ||||||
| -- parsedatetimeM s = firstJust [ | -- parsedatetimeM s = asum [ | ||||||
| --     parseTime defaultTimeLocale "%Y/%m/%d %H:%M:%S" s, | --     parseTime defaultTimeLocale "%Y/%m/%d %H:%M:%S" s, | ||||||
| --     parseTime defaultTimeLocale "%Y-%m-%d %H:%M:%S" s | --     parseTime defaultTimeLocale "%Y-%m-%d %H:%M:%S" s | ||||||
| --     ] | --     ] | ||||||
| @ -672,9 +673,9 @@ parsetime = | |||||||
| -- `YYYY-MM-DD`, `YYYY/MM/DD` or `YYYY.MM.DD`, with leading zeros required. | -- `YYYY-MM-DD`, `YYYY/MM/DD` or `YYYY.MM.DD`, with leading zeros required. | ||||||
| -- For internal use, not quite the same as the journal's "simple dates". | -- For internal use, not quite the same as the journal's "simple dates". | ||||||
| parsedateM :: String -> Maybe Day | parsedateM :: String -> Maybe Day | ||||||
| parsedateM s = firstJust [ | parsedateM s = asum [ | ||||||
|      parsetime defaultTimeLocale "%Y/%m/%d" s, |  | ||||||
|      parsetime defaultTimeLocale "%Y-%m-%d" s, |      parsetime defaultTimeLocale "%Y-%m-%d" s, | ||||||
|  |      parsetime defaultTimeLocale "%Y/%m/%d" s, | ||||||
|      parsetime defaultTimeLocale "%Y.%m.%d" s |      parsetime defaultTimeLocale "%Y.%m.%d" s | ||||||
|      ] |      ] | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -49,6 +49,7 @@ import qualified Control.Exception as C | |||||||
| import Control.Monad (when) | import Control.Monad (when) | ||||||
| import "mtl" Control.Monad.Except (runExceptT) | import "mtl" Control.Monad.Except (runExceptT) | ||||||
| import Data.Default | import Data.Default | ||||||
|  | import Data.Foldable (asum) | ||||||
| import Data.List | import Data.List | ||||||
| import Data.Maybe | import Data.Maybe | ||||||
| import Data.Ord | import Data.Ord | ||||||
| @ -170,7 +171,7 @@ readJournalFile :: InputOpts -> PrefixedFilePath -> IO (Either String Journal) | |||||||
| readJournalFile iopts prefixedfile = do | readJournalFile iopts prefixedfile = do | ||||||
|   let |   let | ||||||
|     (mfmt, f) = splitReaderPrefix prefixedfile |     (mfmt, f) = splitReaderPrefix prefixedfile | ||||||
|     iopts' = iopts{mformat_=firstJust [mfmt, mformat_ iopts]} |     iopts' = iopts{mformat_=asum [mfmt, mformat_ iopts]} | ||||||
|   requireJournalFileExists f |   requireJournalFileExists f | ||||||
|   t <- readFileOrStdinPortably f |   t <- readFileOrStdinPortably f | ||||||
|     -- <- T.readFile f  -- or without line ending translation, for testing |     -- <- T.readFile f  -- or without line ending translation, for testing | ||||||
|  | |||||||
| @ -1152,7 +1152,7 @@ csvFieldValue rules record fieldname = do | |||||||
| -- the "simple date" formats (YYYY/MM/DD, YYYY-MM-DD, YYYY.MM.DD, leading | -- the "simple date" formats (YYYY/MM/DD, YYYY-MM-DD, YYYY.MM.DD, leading | ||||||
| -- zeroes optional). | -- zeroes optional). | ||||||
| parseDateWithCustomOrDefaultFormats :: Maybe DateFormat -> String -> Maybe Day | parseDateWithCustomOrDefaultFormats :: Maybe DateFormat -> String -> Maybe Day | ||||||
| parseDateWithCustomOrDefaultFormats mformat s = firstJust $ map parsewith formats | parseDateWithCustomOrDefaultFormats mformat s = asum $ map parsewith formats | ||||||
|   where |   where | ||||||
|     parsetime = |     parsetime = | ||||||
| #if MIN_VERSION_time(1,5,0) | #if MIN_VERSION_time(1,5,0) | ||||||
|  | |||||||
| @ -82,6 +82,7 @@ import Control.Monad.IO.Class (MonadIO, liftIO) | |||||||
| import Control.Monad.Except (ExceptT(..), runExceptT) | import Control.Monad.Except (ExceptT(..), runExceptT) | ||||||
| import Control.Monad.State.Strict (get,modify',put) | import Control.Monad.State.Strict (get,modify',put) | ||||||
| import Control.Monad.Trans.Class (lift) | import Control.Monad.Trans.Class (lift) | ||||||
|  | import Data.Either (isRight) | ||||||
| import qualified Data.Map.Strict as M | import qualified Data.Map.Strict as M | ||||||
| #if !(MIN_VERSION_base(4,11,0)) | #if !(MIN_VERSION_base(4,11,0)) | ||||||
| import Data.Monoid ((<>)) | import Data.Monoid ((<>)) | ||||||
|  | |||||||
| @ -146,13 +146,6 @@ getCurrentZonedTime = do | |||||||
| 
 | 
 | ||||||
| instance Default Bool where def = False | instance Default Bool where def = False | ||||||
| 
 | 
 | ||||||
| isLeft :: Either a b -> Bool |  | ||||||
| isLeft (Left _) = True |  | ||||||
| isLeft _        = False |  | ||||||
| 
 |  | ||||||
| isRight :: Either a b -> Bool |  | ||||||
| isRight = not . isLeft |  | ||||||
| 
 |  | ||||||
| -- | Apply a function the specified number of times, | -- | Apply a function the specified number of times, | ||||||
| -- which should be > 0 (otherwise does nothing). | -- which should be > 0 (otherwise does nothing). | ||||||
| -- Possibly uses O(n) stack ? | -- Possibly uses O(n) stack ? | ||||||
| @ -178,10 +171,6 @@ expandHomePath = \case | |||||||
|     ('~':_)      -> ioError $ userError "~USERNAME in paths is not supported" |     ('~':_)      -> ioError $ userError "~USERNAME in paths is not supported" | ||||||
|     p            -> return p |     p            -> return p | ||||||
| 
 | 
 | ||||||
| firstJust ms = case dropWhile (==Nothing) ms of |  | ||||||
|     [] -> Nothing |  | ||||||
|     (md:_) -> md |  | ||||||
| 
 |  | ||||||
| -- | Read text from a file, | -- | Read text from a file, | ||||||
| -- converting any \r\n line endings to \n,, | -- converting any \r\n line endings to \n,, | ||||||
| -- using the system locale's text encoding, | -- using the system locale's text encoding, | ||||||
|  | |||||||
| @ -73,6 +73,7 @@ import qualified Control.Exception as C | |||||||
| import Control.Monad (when) | import Control.Monad (when) | ||||||
| import Data.Char | import Data.Char | ||||||
| import Data.Default | import Data.Default | ||||||
|  | import Data.Either (isRight) | ||||||
| import Data.Functor.Identity (Identity) | import Data.Functor.Identity (Identity) | ||||||
| import "base-compat-batteries" Data.List.Compat | import "base-compat-batteries" Data.List.Compat | ||||||
| import Data.List.Extra (nubSort) | import Data.List.Extra (nubSort) | ||||||
|  | |||||||
| @ -23,6 +23,7 @@ import Control.Monad.Trans.Class | |||||||
| import Control.Monad.State.Strict (evalState, evalStateT) | import Control.Monad.State.Strict (evalState, evalStateT) | ||||||
| import Control.Monad.Trans (liftIO) | import Control.Monad.Trans (liftIO) | ||||||
| import Data.Char (toUpper, toLower) | import Data.Char (toUpper, toLower) | ||||||
|  | import Data.Either (isRight) | ||||||
| import Data.Functor.Identity (Identity(..)) | import Data.Functor.Identity (Identity(..)) | ||||||
| import "base-compat-batteries" Data.List.Compat | import "base-compat-batteries" Data.List.Compat | ||||||
| import qualified Data.Set as S | import qualified Data.Set as S | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user