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 :: forall a b. Show a => Validator a -> b -> (String -> b) -> a -> b run (Validator String name a -> Bool predicate) b onNoError String -> b onError a input = if a -> Bool predicate a input then b onNoError else String -> b onError forall a b. (a -> b) -> a -> b $ String -> ShowS showString String "Validator " forall a b. (a -> b) -> a -> b $ forall a. Show a => a -> ShowS shows String name forall a b. (a -> b) -> a -> b $ String -> ShowS showString String " failed on the following input: " forall a b. (a -> b) -> a -> b $ forall a. Show a => a -> String show a input month :: (Num a, Ord a) => Validator a month :: forall a. (Num a, Ord a) => Validator a month = forall a. String -> (a -> Bool) -> Validator a Validator String "month" (forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 Bool -> Bool -> Bool (&&) (forall a. Ord a => a -> a -> Bool >= a 1) (forall a. Ord a => a -> a -> Bool <= a 12)) monthDay :: (Num a, Ord a) => Validator a monthDay :: forall a. (Num a, Ord a) => Validator a monthDay = forall a. String -> (a -> Bool) -> Validator a Validator String "monthDay" (forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 Bool -> Bool -> Bool (&&) (forall a. Ord a => a -> a -> Bool >= a 1) (forall a. Ord a => a -> a -> Bool <= a 31)) weekDay :: (Num a, Ord a) => Validator a weekDay :: forall a. (Num a, Ord a) => Validator a weekDay = forall a. String -> (a -> Bool) -> Validator a Validator String "weekDay" (forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 Bool -> Bool -> Bool (&&) (forall a. Ord a => a -> a -> Bool >= a 1) (forall a. Ord a => a -> a -> Bool <= a 7)) hour :: (Num a, Ord a) => Validator a hour :: forall a. (Num a, Ord a) => Validator a hour = forall a. String -> (a -> Bool) -> Validator a Validator String "hour" (forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 Bool -> Bool -> Bool (&&) (forall a. Ord a => a -> a -> Bool >= a 0) (forall a. Ord a => a -> a -> Bool < a 24)) minute :: (Num a, Ord a) => Validator a minute :: forall a. (Num a, Ord a) => Validator a minute = forall a. String -> (a -> Bool) -> Validator a Validator String "minute" (forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 Bool -> Bool -> Bool (&&) (forall a. Ord a => a -> a -> Bool >= a 0) (forall a. Ord a => a -> a -> Bool < a 60)) second :: (Num a, Ord a) => Validator a second :: forall a. (Num a, Ord a) => Validator a second = forall a. String -> (a -> Bool) -> Validator a Validator String "second" (forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 Bool -> Bool -> Bool (&&) (forall a. Ord a => a -> a -> Bool >= a 0) (forall a. Ord a => a -> a -> Bool < a 60))