Fix formatting and errors
This commit is contained in:
@ -1,15 +1,16 @@
|
||||
module Constraint where
|
||||
module Constraint
|
||||
( Constraint(..)
|
||||
, inRange
|
||||
, inside
|
||||
) where
|
||||
|
||||
data Constraint = Constraint
|
||||
{ lower :: Int
|
||||
, upper :: Int
|
||||
} deriving (Show, Eq)
|
||||
|
||||
makeRangeFromNumber :: Int -> Constraint
|
||||
makeRangeFromNumber x = Constraint x x
|
||||
|
||||
inside :: (Int, Int) -> Constraint -> Bool
|
||||
inside (x, y) (Constraint lower upper) = x >= lower && y <= upper
|
||||
inside (x, y) (Constraint lw up) = x >= lw && y <= up
|
||||
|
||||
inRange :: Int -> Constraint -> Bool
|
||||
inRange x = inside (x, x)
|
||||
|
@ -1,4 +1,6 @@
|
||||
module Field where
|
||||
module Field
|
||||
( module Field
|
||||
) where
|
||||
|
||||
import Constraint
|
||||
import Data.Char (isDigit)
|
||||
@ -44,11 +46,12 @@ parseFieldRange text constraint
|
||||
| text == "*" = Just All
|
||||
| isJust number = Just (Range (fromJust number) (fromJust number))
|
||||
| isJust range = Just (uncurry Range (fromJust range))
|
||||
| isJust sequence = fmap Sequence sequence
|
||||
| isJust valueSequence = fmap Sequence valueSequence
|
||||
| otherwise = Nothing
|
||||
where
|
||||
number = parseNumber text constraint
|
||||
range = parseRange text constraint
|
||||
sequence = parseSequence text constraint
|
||||
valueSequence = parseSequence text constraint
|
||||
|
||||
isNumber :: String -> Bool
|
||||
isNumber = all isDigit
|
||||
|
@ -1,4 +1,6 @@
|
||||
module Helper where
|
||||
module Helper
|
||||
( wordsWhen
|
||||
) where
|
||||
|
||||
wordsWhen :: (Char -> Bool) -> String -> [String]
|
||||
wordsWhen p s =
|
||||
|
@ -1,11 +1,9 @@
|
||||
module Pattern
|
||||
( Pattern(..)
|
||||
, match
|
||||
, safeMatch
|
||||
, parse
|
||||
, check
|
||||
, createParts
|
||||
, parseField
|
||||
, createFields
|
||||
) where
|
||||
|
||||
import Constraint
|
||||
@ -20,16 +18,10 @@ data Pattern = Pattern
|
||||
, cmonth :: Field
|
||||
, cweek :: Field
|
||||
, cyear :: Field
|
||||
}
|
||||
} deriving (Show)
|
||||
|
||||
match :: String -> DateTime -> Bool
|
||||
match :: String -> DateTime -> Maybe Bool
|
||||
match s d =
|
||||
case parse s of
|
||||
Just p -> check p d
|
||||
Nothing -> error "Parse error"
|
||||
|
||||
safeMatch :: String -> DateTime -> Maybe Bool
|
||||
safeMatch s d =
|
||||
case parse s of
|
||||
Just p -> Just (check p d)
|
||||
Nothing -> Nothing
|
||||
@ -39,7 +31,7 @@ parse s
|
||||
| isInvalid = Nothing
|
||||
| otherwise = Just (createPattern $ catMaybes parts)
|
||||
where
|
||||
parts = createParts s
|
||||
parts = createFields s
|
||||
isInvalid = not (checkParts parts)
|
||||
createPattern xs =
|
||||
Pattern
|
||||
@ -51,9 +43,10 @@ parse s
|
||||
, cyear = xs !! 5
|
||||
}
|
||||
|
||||
createParts s = zipWith (curry f) parsers (words s)
|
||||
createFields :: String -> [Maybe Field]
|
||||
createFields text = zipWith (curry f) parsers (words text)
|
||||
where
|
||||
f (g, s) = g s
|
||||
f (parser, s) = parser s
|
||||
|
||||
checkParts :: [Maybe Field] -> Bool
|
||||
checkParts xs
|
||||
@ -64,18 +57,25 @@ checkParts xs
|
||||
parseFieldAdapter :: Constraint -> String -> Maybe Field
|
||||
parseFieldAdapter c t = parseField t c
|
||||
|
||||
parseMinute :: String -> Maybe Field
|
||||
parseMinute = parseFieldAdapter (Constraint 0 59)
|
||||
|
||||
parseHour = parseFieldAdapter (Constraint 0 59)
|
||||
parseHour :: String -> Maybe Field
|
||||
parseHour = parseFieldAdapter (Constraint 0 23)
|
||||
|
||||
parseDay :: String -> Maybe Field
|
||||
parseDay = parseFieldAdapter (Constraint 1 31)
|
||||
|
||||
parseMonth :: String -> Maybe Field
|
||||
parseMonth = parseFieldAdapter (Constraint 1 12)
|
||||
|
||||
parseWeek :: String -> Maybe Field
|
||||
parseWeek = parseFieldAdapter (Constraint 1 7)
|
||||
|
||||
parseYear :: String -> Maybe Field
|
||||
parseYear = parseFieldAdapter (Constraint 0 9999)
|
||||
|
||||
parsers :: [String -> Maybe Field]
|
||||
parsers = [parseMinute, parseHour, parseDay, parseMonth, parseWeek, parseYear]
|
||||
|
||||
check :: Pattern -> DateTime -> Bool
|
||||
|
Reference in New Issue
Block a user