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 "base-compat-batteries" Data.List.Compat | ||||
| import Data.Default | ||||
| import Data.Foldable (asum) | ||||
| import Data.Maybe | ||||
| import qualified Data.Set as Set | ||||
| import Data.Text (Text) | ||||
| @ -654,7 +655,7 @@ advancetonthweekday n wd s = | ||||
| 
 | ||||
| -- -- | Parse a couple of date-time string formats to a time type. | ||||
| -- 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 | ||||
| --     ] | ||||
| @ -672,9 +673,9 @@ parsetime = | ||||
| -- `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". | ||||
| parsedateM :: String -> Maybe Day | ||||
| parsedateM s = firstJust [ | ||||
|      parsetime defaultTimeLocale "%Y/%m/%d" s, | ||||
| parsedateM s = asum [ | ||||
|      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 "mtl" Control.Monad.Except (runExceptT) | ||||
| import Data.Default | ||||
| import Data.Foldable (asum) | ||||
| import Data.List | ||||
| import Data.Maybe | ||||
| import Data.Ord | ||||
| @ -170,7 +171,7 @@ readJournalFile :: InputOpts -> PrefixedFilePath -> IO (Either String Journal) | ||||
| readJournalFile iopts prefixedfile = do | ||||
|   let | ||||
|     (mfmt, f) = splitReaderPrefix prefixedfile | ||||
|     iopts' = iopts{mformat_=firstJust [mfmt, mformat_ iopts]} | ||||
|     iopts' = iopts{mformat_=asum [mfmt, mformat_ iopts]} | ||||
|   requireJournalFileExists f | ||||
|   t <- readFileOrStdinPortably f | ||||
|     -- <- 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 | ||||
| -- zeroes optional). | ||||
| parseDateWithCustomOrDefaultFormats :: Maybe DateFormat -> String -> Maybe Day | ||||
| parseDateWithCustomOrDefaultFormats mformat s = firstJust $ map parsewith formats | ||||
| parseDateWithCustomOrDefaultFormats mformat s = asum $ map parsewith formats | ||||
|   where | ||||
|     parsetime = | ||||
| #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.State.Strict (get,modify',put) | ||||
| import Control.Monad.Trans.Class (lift) | ||||
| import Data.Either (isRight) | ||||
| import qualified Data.Map.Strict as M | ||||
| #if !(MIN_VERSION_base(4,11,0)) | ||||
| import Data.Monoid ((<>)) | ||||
|  | ||||
| @ -146,13 +146,6 @@ getCurrentZonedTime = do | ||||
| 
 | ||||
| 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, | ||||
| -- which should be > 0 (otherwise does nothing). | ||||
| -- Possibly uses O(n) stack ? | ||||
| @ -178,10 +171,6 @@ expandHomePath = \case | ||||
|     ('~':_)      -> ioError $ userError "~USERNAME in paths is not supported" | ||||
|     p            -> return p | ||||
| 
 | ||||
| firstJust ms = case dropWhile (==Nothing) ms of | ||||
|     [] -> Nothing | ||||
|     (md:_) -> md | ||||
| 
 | ||||
| -- | Read text from a file, | ||||
| -- converting any \r\n line endings to \n,, | ||||
| -- using the system locale's text encoding, | ||||
|  | ||||
| @ -73,6 +73,7 @@ import qualified Control.Exception as C | ||||
| import Control.Monad (when) | ||||
| import Data.Char | ||||
| import Data.Default | ||||
| import Data.Either (isRight) | ||||
| import Data.Functor.Identity (Identity) | ||||
| import "base-compat-batteries" Data.List.Compat | ||||
| import Data.List.Extra (nubSort) | ||||
|  | ||||
| @ -23,6 +23,7 @@ import Control.Monad.Trans.Class | ||||
| import Control.Monad.State.Strict (evalState, evalStateT) | ||||
| import Control.Monad.Trans (liftIO) | ||||
| import Data.Char (toUpper, toLower) | ||||
| import Data.Either (isRight) | ||||
| import Data.Functor.Identity (Identity(..)) | ||||
| import "base-compat-batteries" Data.List.Compat | ||||
| import qualified Data.Set as S | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user