{-# LANGUAGE Safe #-}
module Valida.ValidationUtils
(
fromEither
, toEither
, validation
, validationConst
, fromSuccess
, fromFailure
, isSuccess
, isFailure
, successes
, failures
, partitionValidations
) where
import Valida.Validation (Validation (..), validation, validationConst)
toEither :: Validation a b -> Either a b
toEither :: Validation a b -> Either a b
toEither = (a -> Either a b)
-> (b -> Either a b) -> Validation a b -> Either a b
forall e c a. (e -> c) -> (a -> c) -> Validation e a -> c
validation a -> Either a b
forall a b. a -> Either a b
Left b -> Either a b
forall a b. b -> Either a b
Right
fromEither :: Either e a -> Validation e a
fromEither :: Either e a -> Validation e a
fromEither = (e -> Validation e a)
-> (a -> Validation e a) -> Either e a -> Validation e a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either e -> Validation e a
forall e a. e -> Validation e a
Failure a -> Validation e a
forall e a. a -> Validation e a
Success
isFailure :: Validation e a -> Bool
isFailure :: Validation e a -> Bool
isFailure (Failure e
_) = Bool
True
isFailure Validation e a
_ = Bool
False
isSuccess :: Validation e a -> Bool
isSuccess :: Validation e a -> Bool
isSuccess (Success a
_) = Bool
True
isSuccess Validation e a
_ = Bool
False
fromFailure :: e -> Validation e a -> e
fromFailure :: e -> Validation e a -> e
fromFailure e
_ (Failure e
e) = e
e
fromFailure e
e Validation e a
_ = e
e
fromSuccess :: a -> Validation e a -> a
fromSuccess :: a -> Validation e a -> a
fromSuccess a
_ (Success a
a) = a
a
fromSuccess a
a Validation e a
_ = a
a
failures :: [Validation e a] -> [e]
failures :: [Validation e a] -> [e]
failures [Validation e a]
xs = [e
e | Failure e
e <- [Validation e a]
xs]
{-# INLINABLE failures #-}
successes :: [Validation e a] -> [a]
successes :: [Validation e a] -> [a]
successes [Validation e a]
xs = [a
a | Success a
a <- [Validation e a]
xs]
{-# INLINABLE successes #-}
partitionValidations :: [Validation e a] -> ([e], [a])
partitionValidations :: [Validation e a] -> ([e], [a])
partitionValidations = (Validation e a -> ([e], [a]) -> ([e], [a]))
-> ([e], [a]) -> [Validation e a] -> ([e], [a])
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr ((e -> ([e], [a]) -> ([e], [a]))
-> (a -> ([e], [a]) -> ([e], [a]))
-> Validation e a
-> ([e], [a])
-> ([e], [a])
forall e c a. (e -> c) -> (a -> c) -> Validation e a -> c
validation e -> ([e], [a]) -> ([e], [a])
forall a b. a -> ([a], b) -> ([a], b)
failure a -> ([e], [a]) -> ([e], [a])
forall a a. a -> (a, [a]) -> (a, [a])
success) ([],[])
where
failure :: a -> ([a], b) -> ([a], b)
failure a
a ~([a]
l, b
r) = (a
aa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
l, b
r)
success :: a -> (a, [a]) -> (a, [a])
success a
a ~(a
l, [a]
r) = (a
l, a
aa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
r)