{-# LANGUAGE Safe #-}
module Valida
( Selector
, Validation (..)
, ValidationRule
, Validator (runValidator)
, validate
, verify
, vrule
, (-?>)
, label
, labelV
, (<?>)
, (<??>)
, module Valida.Combinators
, module Valida.ValidationUtils
) where
import Data.Bifunctor (Bifunctor (first))
import Valida.Combinators
import Valida.Validation (Validation (..))
import Valida.ValidationRule (ValidationRule (..), vrule)
import Valida.ValidationUtils
import Valida.Validator (Selector, Validator (..))
verify :: ValidationRule e b -> Selector a b -> Validator e a b
verify :: ValidationRule e b -> Selector a b -> Validator e a b
verify (ValidationRule b -> Validation e ()
rule) Selector a b
selector = (a -> Validation e b) -> Validator e a b
forall e inp a. (inp -> Validation e a) -> Validator e inp a
Validator ((a -> Validation e b) -> Validator e a b)
-> (a -> Validation e b) -> Validator e a b
forall a b. (a -> b) -> a -> b
$ \a
x -> Selector a b
selector a
x b -> Validation e () -> Validation e b
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ b -> Validation e ()
rule (Selector a b
selector a
x)
infix 5 -?>
(-?>) :: Selector a b -> ValidationRule e b -> Validator e a b
-?> :: Selector a b -> ValidationRule e b -> Validator e a b
(-?>) = (ValidationRule e b -> Selector a b -> Validator e a b)
-> Selector a b -> ValidationRule e b -> Validator e a b
forall a b c. (a -> b -> c) -> b -> a -> c
flip ValidationRule e b -> Selector a b -> Validator e a b
forall e b a. ValidationRule e b -> Selector a b -> Validator e a b
verify
label :: e -> ValidationRule x a -> ValidationRule e a
label :: e -> ValidationRule x a -> ValidationRule e a
label e
err (ValidationRule a -> Validation x ()
rule) = (a -> Validation e ()) -> ValidationRule e a
forall a e. (a -> Validation e ()) -> ValidationRule e a
vrule ((a -> Validation e ()) -> ValidationRule e a)
-> (a -> Validation e ()) -> ValidationRule e a
forall a b. (a -> b) -> a -> b
$ (x -> e) -> Validation x () -> Validation e ()
forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
first (e -> x -> e
forall a b. a -> b -> a
const e
err) (Validation x () -> Validation e ())
-> (a -> Validation x ()) -> a -> Validation e ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Validation x ()
rule
infix 6 <?>
(<?>) :: ValidationRule x a -> e -> ValidationRule e a
<?> :: ValidationRule x a -> e -> ValidationRule e a
(<?>) = (e -> ValidationRule x a -> ValidationRule e a)
-> ValidationRule x a -> e -> ValidationRule e a
forall a b c. (a -> b -> c) -> b -> a -> c
flip e -> ValidationRule x a -> ValidationRule e a
forall e x a. e -> ValidationRule x a -> ValidationRule e a
label
labelV :: e -> Validator x inp a -> Validator e inp a
labelV :: e -> Validator x inp a -> Validator e inp a
labelV e
err (Validator inp -> Validation x a
v) = (inp -> Validation e a) -> Validator e inp a
forall e inp a. (inp -> Validation e a) -> Validator e inp a
Validator ((inp -> Validation e a) -> Validator e inp a)
-> (inp -> Validation e a) -> Validator e inp a
forall a b. (a -> b) -> a -> b
$ (x -> e) -> Validation x a -> Validation e a
forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
first (e -> x -> e
forall a b. a -> b -> a
const e
err) (Validation x a -> Validation e a)
-> (inp -> Validation x a) -> inp -> Validation e a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. inp -> Validation x a
v
infix 0 <??>
(<??>) :: Validator x inp a -> e -> Validator e inp a
<??> :: Validator x inp a -> e -> Validator e inp a
(<??>) = (e -> Validator x inp a -> Validator e inp a)
-> Validator x inp a -> e -> Validator e inp a
forall a b c. (a -> b -> c) -> b -> a -> c
flip e -> Validator x inp a -> Validator e inp a
forall e x inp a. e -> Validator x inp a -> Validator e inp a
labelV
validate :: ValidationRule e a -> Validator e a a
validate :: ValidationRule e a -> Validator e a a
validate = Selector a a -> ValidationRule e a -> Validator e a a
forall a b e. Selector a b -> ValidationRule e b -> Validator e a b
(-?>) Selector a a
forall a. a -> a
id