packages feed

attoparsec-time-1.0.3.1: library/Attoparsec/Time/Validation.hs

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