Fix formatting and errors

This commit is contained in:
2017-11-12 12:53:43 +03:00
parent 35025d9359
commit 37eabfbc60
8 changed files with 58 additions and 54 deletions

View File

@ -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)

View File

@ -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

View File

@ -1,4 +1,6 @@
module Helper where
module Helper
( wordsWhen
) where
wordsWhen :: (Char -> Bool) -> String -> [String]
wordsWhen p s =

View File

@ -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