module BishBosh.Property.SelfValidating(
SelfValidating(..),
findErrors,
isValid,
isInvalid
) where
class SelfValidating a where
findInvalidity :: a -> [String]
instance SelfValidating a => SelfValidating [a] where
findInvalidity :: [a] -> [String]
findInvalidity = (a -> [String]) -> [a] -> [String]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap a -> [String]
forall a. SelfValidating a => a -> [String]
findInvalidity
isValid :: SelfValidating a => a -> Bool
isValid :: a -> Bool
isValid = [String] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null ([String] -> Bool) -> (a -> [String]) -> a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> [String]
forall a. SelfValidating a => a -> [String]
findInvalidity
isInvalid :: SelfValidating a => a -> Bool
isInvalid :: a -> Bool
isInvalid = Bool -> Bool
not (Bool -> Bool) -> (a -> Bool) -> a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Bool
forall a. SelfValidating a => a -> Bool
isValid
findErrors :: [(selfValidator -> Bool, String)] -> selfValidator -> [String]
findErrors :: [(selfValidator -> Bool, String)] -> selfValidator -> [String]
findErrors [(selfValidator -> Bool, String)]
assocs selfValidator
selfValidator = [
String
errorMessage |
(selfValidator -> Bool
predicate, String
errorMessage) <- [(selfValidator -> Bool, String)]
assocs,
selfValidator -> Bool
predicate selfValidator
selfValidator
]