module Attoparsec.Time.Validation where import Attoparsec.Time.Prelude data Validator a = Validator String (a -> Bool) run :: Show a => Validator a -> b -> (String -> b) -> a -> b run (Validator name predicate) onNoError onError input = if predicate input then onNoError else onError $ showString "Validator " $ shows name $ showString " failed on the following input: " $ show input month :: (Num a, Ord a) => Validator a month = Validator "month" (liftA2 (&&) (>= 1) (<= 12)) monthDay :: (Num a, Ord a) => Validator a monthDay = Validator "monthDay" (liftA2 (&&) (>= 1) (<= 31)) weekDay :: (Num a, Ord a) => Validator a weekDay = Validator "weekDay" (liftA2 (&&) (>= 1) (<= 7)) hour :: (Num a, Ord a) => Validator a hour = Validator "hour" (liftA2 (&&) (>= 0) (< 24)) minute :: (Num a, Ord a) => Validator a minute = Validator "minute" (liftA2 (&&) (>= 0) (< 60)) second :: (Num a, Ord a) => Validator a second = Validator "second" (liftA2 (&&) (>= 0) (< 60))