cron-0.5.0: src/System/Cron/Internal/Describe/Utils.hs
module System.Cron.Internal.Describe.Utils
(
viewHour
, viewMinute
, viewMinuteRange
, viewHourList
, allWords
, cap
, joinWords
) where
import Data.Char (toUpper)
import Data.List.NonEmpty (NonEmpty)
import System.Cron.Types
import System.Cron.Internal.Describe.Time
viewHour :: HourSpec -> Maybe Hour
viewHour = viewSpecificTime Hour . hourSpec
viewMinute :: MinuteSpec -> Maybe Minute
viewMinute = viewSpecificTime Minute . minuteSpec
viewMinuteRange :: MinuteSpec -> Maybe (Minute, Minute)
viewMinuteRange = viewRange . minuteSpec
where viewRange (Field (RangeField' rf)) = Just (Minute $ rfBegin rf,
Minute $ rfEnd rf)
viewRange _ = Nothing
viewHourList :: HourSpec -> Maybe (NonEmpty BaseField)
viewHourList = viewList . hourSpec
where viewList (ListField ne) = Just ne
viewList _ = Nothing
viewSpecificTime :: (Int -> a) -> CronField -> Maybe a
viewSpecificTime f (Field (SpecificField' s)) = Just . f $ specificField s
viewSpecificTime _ _ = Nothing
allWords :: [String] -> String
allWords = unwords . filter (not . null)
cap :: String -> String
cap [] = []
cap (x:xs) = toUpper x : xs
joinWords :: [String] -> String
joinWords [] = []
joinWords [x] = x
joinWords [x, y] = x ++ " and " ++ y
joinWords (x:xs) = x ++ ", " ++ joinWords xs