-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Data Validation
--   
--   Data Validation inspired by JSR305
@package menshen
@version 0.0.2


-- | Data Validation inspired by JSR305
module Data.Menshen

-- | Define how invalid infomation passed to upper layer.
class Monad m => HasValid m
invalid :: (HasValid m, HasI18n a) => a -> m b
mark :: HasValid m => String -> m a -> m a

-- | Validator, use to define detailed validation check.
type Validator a = forall m. HasValid m => m a -> m a

-- | Validation Error Message
data ValidationException
ShouldBeFalse :: ValidationException
ShouldBeTrue :: ValidationException
ShouldNull :: ValidationException
ShouldNotNull :: ValidationException
InvalidSize :: Word64 -> Word64 -> ValidationException
InvalidPositive :: ValidationException
InvalidPositiveOrZero :: ValidationException
InvalidNegative :: ValidationException
InvalidNegativeOrZero :: ValidationException
InvalidMax :: Integer -> ValidationException
InvalidMin :: Integer -> ValidationException
InvalidEmail :: ValidationException
InvalidNotBlank :: ValidationException
InvalidNotEmpty :: ValidationException
InvalidPast :: ValidationException
InvalidFuture :: ValidationException
InvalidPastOrPresent :: ValidationException
InvalidFutureOrPresent :: ValidationException
InvalidDecimalMax :: Scientific -> ValidationException
InvalidDecimalMin :: Scientific -> ValidationException
InvalidDigits :: Word8 -> Word8 -> ValidationException
InvalidPattern :: String -> ValidationException

-- | Plan for i18n translate, now just for english.
class Exception e => HasI18n e
toI18n :: HasI18n e => e -> String
toErr :: HasI18n e => String -> e -> ValidatorErr
data ValidatorErr
ValidatorErr :: SomeException -> String -> String -> ValidatorErr
[exception] :: ValidatorErr -> SomeException
[message] :: ValidatorErr -> String
[field] :: ValidatorErr -> String
data VerifyResult a
Invalid :: [ValidatorErr] -> VerifyResult a
Valid :: a -> VerifyResult a

-- | Length checker bundle
class HasValidSize a

-- | Size validation
size :: HasValidSize a => (Word64, Word64) -> Validator a

-- | Assert not empty
notEmpty :: HasValidSize a => Validator a

-- | Assert not blank
notBlank :: HasValidSize a => Validator a

-- | calculate length from value
getLength :: HasValidSize a => a -> Word64

-- | Assert not null
notNull :: Validator (Maybe a)

-- | Assert null
assertNull :: Validator (Maybe a)

-- | Assert true
assertTrue :: Validator Bool

-- | Assert false
assertFalse :: Validator Bool

-- | Positive validation
positive :: (Eq a, Num a) => Validator a

-- | Positive or zero validation
positiveOrZero :: (Eq a, Num a) => Validator a

-- | Negative validation
negative :: (Eq a, Num a) => Validator a

-- | Negative or zero validation
negativeOrZero :: (Eq a, Num a) => Validator a

-- | Minimum int validation
minInt :: Integral a => a -> Validator a

-- | Maximum int validation
maxInt :: Integral a => a -> Validator a

-- | Minimum int validation
minDecimal :: RealFloat a => a -> Validator a

-- | Maximum decimal validation
maxDecimal :: RealFloat a => a -> Validator a

-- | Regular expression validation
pattern :: RegexLike Regex a => String -> Validator a

-- | Email validation
email :: RegexLike Regex a => Validator a

-- | apply record validation to the value
(?) :: HasValid m => m a -> Validator a -> m a
infixl 5 ?

-- | lift value a to validation context and check if it is valid.
verify :: HasValid m => a -> Validator a -> m a

-- | lift value a to validation context and check if it is valid.
(?:) :: HasValid m => a -> Validator a -> m a
infixl 5 ?:
vcvt :: Validator' a -> Validator a

-- | This is the pure functional matching operator. If the target cannot be
--   produced then some empty result will be returned. If there is an error
--   in processing, then <a>error</a> will be called.
(=~) :: (RegexMaker Regex CompOption ExecOption source, RegexContext Regex source1 target) => source1 -> source -> target
instance GHC.Base.Functor Data.Menshen.VerifyResult
instance GHC.Show.Show a => GHC.Show.Show (Data.Menshen.VerifyResult a)
instance GHC.Show.Show Data.Menshen.ValidatorErr
instance GHC.Show.Show Data.Menshen.ValidationException
instance Data.Menshen.HasValidSize Data.Text.Internal.Text
instance Data.Menshen.HasValidSize Data.Text.Internal.Lazy.Text
instance Data.Menshen.HasValidSize [a]
instance GHC.Base.Applicative Data.Menshen.VerifyResult
instance GHC.Base.Monad Data.Menshen.VerifyResult
instance Data.Menshen.HasValid Data.Menshen.VerifyResult
instance Data.Menshen.HasValid (Data.Either.Either GHC.Base.String)
instance Data.Menshen.HasI18n Data.Menshen.ValidationException
instance GHC.Exception.Type.Exception Data.Menshen.ValidationException
