-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Constrained text newtypes
--
-- See README at
-- https://github.com/MercuryTechnologies/string-variants#readme.
@package string-variants
@version 0.2.2.0
module Data.StringVariants.Util
type family SymbolNonEmpty (s :: Symbol) :: Constraint
type SymbolWithNoSpaceAround s = (SymbolNoLeadingSpace (UnconsSymbol s), SymbolNoTrailingSpace (UnconsSymbol s))
type family SymbolNoLongerThan (s :: Symbol) (n :: Nat) :: Constraint
-- | If the integer is >= 1, evaluate the function with the proof of
-- that. Otherwise, return the default value
usePositiveNat :: Integer -> a -> (forall n proxy. (KnownNat n, 1 <= n) => proxy n -> a) -> a
textIsWhitespace :: Text -> Bool
textHasNoMeaningfulContent :: Text -> Bool
-- | Internal module of NonEmptyText, allowing breaking the abstraction.
--
-- Prefer to use Data.StringVariants.NonEmptyText instead.
module Data.StringVariants.NonEmptyText.Internal
-- | Non Empty Text, requires the input is between 1 and n chars
-- and not just whitespace.
newtype NonEmptyText (n :: Nat)
NonEmptyText :: Text -> NonEmptyText (n :: Nat)
mkNonEmptyText :: forall n. (KnownNat n, 1 <= n) => Text -> Maybe (NonEmptyText n)
mkNonEmptyTextWithTruncate :: forall n. (KnownNat n, 1 <= n) => Text -> Maybe (NonEmptyText n)
-- | Make a NonEmptyText when you can manually verify the length
unsafeMkNonEmptyText :: forall n. (KnownNat n, 1 <= n) => Text -> NonEmptyText n
-- | Converts a NonEmptyText to a wider NonEmptyText
widen :: (1 <= n, n <= m) => NonEmptyText n -> NonEmptyText m
compileNonEmptyTextKnownLength :: QuasiQuoter
instance Data.MonoTraversable.MonoFoldable (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
instance GHC.Base.Semigroup (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
instance Data.Aeson.Types.ToJSON.ToJSON (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
instance GHC.Classes.Ord (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
instance GHC.Classes.Eq (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
instance Language.Haskell.TH.Syntax.Lift (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
instance GHC.Read.Read (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
instance GHC.Show.Show (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
instance GHC.Generics.Generic (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
instance (GHC.TypeNats.KnownNat n, 1 Data.Type.Ord.<= n) => Data.Aeson.Types.FromJSON.FromJSON (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
instance Data.String.Conversions.ConvertibleStrings (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n) Data.Text.Internal.Text
instance Data.String.Conversions.ConvertibleStrings (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n) GHC.Base.String
instance Data.String.Conversions.ConvertibleStrings (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n) Data.ByteString.Internal.ByteString
instance (GHC.TypeNats.KnownNat n, 1 Data.Type.Ord.<= n) => Test.QuickCheck.Arbitrary.Arbitrary (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
-- | Internal module of Prose, allowing breaking the abstraction.
--
-- Prefer to use Data.StringVariants.Prose instead.
module Data.StringVariants.Prose.Internal
-- | Whitespace-trimmed, non-empty text, for use with API endpoints. The
-- rationale is that there are many situations where if a client sends
-- text that is empty or all whitespace, there's probably a client error.
-- Not suitable for database fields, as there is no character limit (see
-- ProsePersistFieldMsg).
newtype Prose
Prose :: Text -> Prose
mkProse :: Text -> Maybe Prose
proseFromNonEmptyText :: NonEmptyText n -> Prose
compileProse :: QuasiQuoter
literalProse :: forall (s :: Symbol). (KnownSymbol s, SymbolWithNoSpaceAround s) => Prose
proseToText :: Prose -> Text
instance Data.Aeson.Types.ToJSON.ToJSONKey Data.StringVariants.Prose.Internal.Prose
instance Data.Aeson.Types.ToJSON.ToJSON Data.StringVariants.Prose.Internal.Prose
instance GHC.Base.Semigroup Data.StringVariants.Prose.Internal.Prose
instance GHC.Show.Show Data.StringVariants.Prose.Internal.Prose
instance GHC.Classes.Ord Data.StringVariants.Prose.Internal.Prose
instance Language.Haskell.TH.Syntax.Lift Data.StringVariants.Prose.Internal.Prose
instance GHC.Classes.Eq Data.StringVariants.Prose.Internal.Prose
instance Data.String.Conversions.ConvertibleStrings Data.StringVariants.Prose.Internal.Prose Data.Text.Internal.Text
instance Data.String.Conversions.ConvertibleStrings Data.StringVariants.Prose.Internal.Prose Data.Text.Internal.Lazy.Text
instance Data.Aeson.Types.FromJSON.FromJSON Data.StringVariants.Prose.Internal.Prose
-- | Prose type: arbitrary length non-empty text that is trimmed.
module Data.StringVariants.Prose
-- | Whitespace-trimmed, non-empty text, for use with API endpoints. The
-- rationale is that there are many situations where if a client sends
-- text that is empty or all whitespace, there's probably a client error.
-- Not suitable for database fields, as there is no character limit (see
-- ProsePersistFieldMsg).
data Prose
mkProse :: Text -> Maybe Prose
compileProse :: QuasiQuoter
literalProse :: forall (s :: Symbol). (KnownSymbol s, SymbolWithNoSpaceAround s) => Prose
proseToText :: Prose -> Text
proseFromNonEmptyText :: NonEmptyText n -> Prose
module Data.StringVariants.NonEmptyText
-- | Non Empty Text, requires the input is between 1 and n chars
-- and not just whitespace.
data NonEmptyText (n :: Nat)
-- | Comparison (<=) of comparable types, as a constraint.
type (x :: k) <= (y :: k) = x <=? y ~ 'True
infix 4 <=
mkNonEmptyText :: forall n. (KnownNat n, 1 <= n) => Text -> Maybe (NonEmptyText n)
mkNonEmptyTextWithTruncate :: forall n. (KnownNat n, 1 <= n) => Text -> Maybe (NonEmptyText n)
literalNonEmptyText :: forall (s :: Symbol) (n :: Nat). (KnownSymbol s, KnownNat n, SymbolNonEmpty s, SymbolWithNoSpaceAround s, SymbolNoLongerThan s n) => NonEmptyText n
-- | Make a NonEmptyText when you can manually verify the length
unsafeMkNonEmptyText :: forall n. (KnownNat n, 1 <= n) => Text -> NonEmptyText n
compileNonEmptyText :: Integer -> QuasiQuoter
compileNonEmptyTextKnownLength :: QuasiQuoter
convertEmptyTextToNothing :: Text -> Maybe Text
-- | Converts a NonEmptyText to a wider NonEmptyText
widen :: (1 <= n, n <= m) => NonEmptyText n -> NonEmptyText m
nonEmptyTextToText :: NonEmptyText n -> Text
-- | Narrows the maximum length, dropping any remaining trailing
-- characters.
takeNonEmptyText :: forall m n. (KnownNat m, KnownNat n, 1 <= n, n <= m) => NonEmptyText m -> NonEmptyText n
-- | Narrows the maximum length, dropping any prefix remaining characters.
takeNonEmptyTextEnd :: forall m n. (KnownNat m, KnownNat n, 1 <= n, n <= m) => NonEmptyText m -> NonEmptyText n
-- | O(n) Splits a NonEmptyText into components of length
-- chunkSize. The chunks may be shorter than the chunkSize
-- depending on the length of the input and spacing. Each chunk is
-- stripped of whitespace.
chunksOfNonEmptyText :: forall chunkSize totalSize. (KnownNat chunkSize, KnownNat totalSize, chunkSize <= totalSize, 1 <= chunkSize) => NonEmptyText totalSize -> NonEmpty (NonEmptyText chunkSize)
-- | Identical to the normal text filter function, but maintains the
-- type-level invariant that the text length is <= n, unlike
-- unwrapping the text, filtering, then rewrapping the text.
--
-- Will return Nothing if the resulting length is zero.
filterNonEmptyText :: (KnownNat n, 1 <= n) => (Char -> Bool) -> NonEmptyText n -> Maybe (NonEmptyText n)
-- | Concat two NonEmptyText values, with the new maximum length being the
-- sum of the two maximum lengths of the inputs.
--
-- Mnemonic: <> for monoid, | from NonEmpty's
-- :| operator
(<>|) :: NonEmptyText n -> NonEmptyText m -> NonEmptyText (n + m)
-- | Concat two NonEmptyText values with a space in between them.
-- The new maximum length is the sum of the two maximum lengths of the
-- inputs + 1 for the space.
--
-- Useful for unwordslike operations, or combining first and last
-- names.
concatWithSpace :: NonEmptyText n -> NonEmptyText m -> NonEmptyText ((n + m) + 1)
data ContainsNonWhitespaceCharacters
ContainsNonWhitespaceCharacters :: ContainsNonWhitespaceCharacters
exactLengthRefinedToRange :: Refined (ContainsNonWhitespaceCharacters && SizeEqualTo n) Text -> NonEmptyText n
nonEmptyTextFromRefined :: Refined (ContainsNonWhitespaceCharacters && (SizeLessThan n || SizeEqualTo n)) Text -> NonEmptyText n
refinedFromNonEmptyText :: NonEmptyText n -> Refined (ContainsNonWhitespaceCharacters && (SizeLessThan n || SizeEqualTo n)) Text
instance GHC.Generics.Generic Data.StringVariants.NonEmptyText.ContainsNonWhitespaceCharacters
instance Refined.Predicate Data.StringVariants.NonEmptyText.ContainsNonWhitespaceCharacters Data.Text.Internal.Text
module Data.StringVariants.NullableNonEmptyText
-- | Newtype wrapper around Maybe NonEmptyText that converts empty string
-- to Nothing.
--
-- This is aimed primarily at JSON parsing: make it possible to parse
-- empty string and turn it into Nothing, in order to convert
-- everything into Maybe NonEmptyText at the edge of the system.
--
-- While using this for JSON parsing, use Maybe
-- NullableNonEmptyText. Aeson special-cases Maybe to allow
-- nulls, so Maybe catches the nulls and
-- NullableNonEmptyText catches the empty strings.
--
-- To extract Maybe NonEmptyText values from Maybe
-- NullableNonEmptyText, use
-- nullableNonEmptyTextToMaybeNonEmptyText.
newtype NullableNonEmptyText n
NullableNonEmptyText :: Maybe (NonEmptyText n) -> NullableNonEmptyText n
mkNonEmptyTextWithTruncate :: forall n. (KnownNat n, 1 <= n) => Text -> Maybe (NonEmptyText n)
compileNullableNonEmptyText :: Integer -> QuasiQuoter
-- | This requires the text to be non-empty. For the empty text just use
-- the constructor `NullableNonEmptyText Nothing`
literalNullableNonEmptyText :: forall (s :: Symbol) (n :: Nat). (KnownSymbol s, KnownNat n, SymbolNonEmpty s, SymbolWithNoSpaceAround s, SymbolNoLongerThan s n) => NullableNonEmptyText n
mkNullableNonEmptyText :: forall n. (KnownNat n, 1 <= n) => Text -> Maybe (NullableNonEmptyText n)
parseNullableNonEmptyText :: (KnownNat n, 1 <= n) => Text -> Object -> Parser (NullableNonEmptyText n)
nullNonEmptyText :: NullableNonEmptyText n
maybeTextToTruncateNullableNonEmptyText :: forall n. (KnownNat n, 1 <= n) => Maybe Text -> NullableNonEmptyText n
nonEmptyTextToNullable :: NonEmptyText n -> NullableNonEmptyText n
maybeNonEmptyTextToNullable :: Maybe (NonEmptyText n) -> NullableNonEmptyText n
nullableNonEmptyTextToMaybeText :: NullableNonEmptyText n -> Maybe Text
nullableNonEmptyTextToMaybeNonEmptyText :: NullableNonEmptyText n -> Maybe (NonEmptyText n)
fromMaybeNullableText :: Maybe (NullableNonEmptyText n) -> NullableNonEmptyText n
isNullNonEmptyText :: NullableNonEmptyText n -> Bool
instance Data.Aeson.Types.ToJSON.ToJSON (Data.StringVariants.NullableNonEmptyText.NullableNonEmptyText n)
instance GHC.Classes.Eq (Data.StringVariants.NullableNonEmptyText.NullableNonEmptyText n)
instance Language.Haskell.TH.Syntax.Lift (Data.StringVariants.NullableNonEmptyText.NullableNonEmptyText n)
instance GHC.Read.Read (Data.StringVariants.NullableNonEmptyText.NullableNonEmptyText n)
instance GHC.Show.Show (Data.StringVariants.NullableNonEmptyText.NullableNonEmptyText n)
instance GHC.Generics.Generic (Data.StringVariants.NullableNonEmptyText.NullableNonEmptyText n)
instance (GHC.TypeNats.KnownNat n, 1 Data.Type.Ord.<= n) => Data.Aeson.Types.FromJSON.FromJSON (Data.StringVariants.NullableNonEmptyText.NullableNonEmptyText n)
module Data.StringVariants
-- | Non Empty Text, requires the input is between 1 and n chars
-- and not just whitespace.
data NonEmptyText (n :: Nat)
mkNonEmptyText :: forall n. (KnownNat n, 1 <= n) => Text -> Maybe (NonEmptyText n)
-- | Make a NonEmptyText when you can manually verify the length
unsafeMkNonEmptyText :: forall n. (KnownNat n, 1 <= n) => Text -> NonEmptyText n
mkNonEmptyTextWithTruncate :: forall n. (KnownNat n, 1 <= n) => Text -> Maybe (NonEmptyText n)
compileNonEmptyText :: Integer -> QuasiQuoter
compileNonEmptyTextKnownLength :: QuasiQuoter
nonEmptyTextToText :: NonEmptyText n -> Text
convertEmptyTextToNothing :: Text -> Maybe Text
maybeTextToTruncateNullableNonEmptyText :: forall n. (KnownNat n, 1 <= n) => Maybe Text -> NullableNonEmptyText n
-- | Comparison (<=) of comparable types, as a constraint.
type (x :: k) <= (y :: k) = x <=? y ~ 'True
infix 4 <=
-- | Converts a NonEmptyText to a wider NonEmptyText
widen :: (1 <= n, n <= m) => NonEmptyText n -> NonEmptyText m
-- | Narrows the maximum length, dropping any remaining trailing
-- characters.
takeNonEmptyText :: forall m n. (KnownNat m, KnownNat n, 1 <= n, n <= m) => NonEmptyText m -> NonEmptyText n
-- | Narrows the maximum length, dropping any prefix remaining characters.
takeNonEmptyTextEnd :: forall m n. (KnownNat m, KnownNat n, 1 <= n, n <= m) => NonEmptyText m -> NonEmptyText n
-- | O(n) Splits a NonEmptyText into components of length
-- chunkSize. The chunks may be shorter than the chunkSize
-- depending on the length of the input and spacing. Each chunk is
-- stripped of whitespace.
chunksOfNonEmptyText :: forall chunkSize totalSize. (KnownNat chunkSize, KnownNat totalSize, chunkSize <= totalSize, 1 <= chunkSize) => NonEmptyText totalSize -> NonEmpty (NonEmptyText chunkSize)
-- | Identical to the normal text filter function, but maintains the
-- type-level invariant that the text length is <= n, unlike
-- unwrapping the text, filtering, then rewrapping the text.
--
-- Will return Nothing if the resulting length is zero.
filterNonEmptyText :: (KnownNat n, 1 <= n) => (Char -> Bool) -> NonEmptyText n -> Maybe (NonEmptyText n)
-- | Concat two NonEmptyText values, with the new maximum length being the
-- sum of the two maximum lengths of the inputs.
--
-- Mnemonic: <> for monoid, | from NonEmpty's
-- :| operator
(<>|) :: NonEmptyText n -> NonEmptyText m -> NonEmptyText (n + m)
data ContainsNonWhitespaceCharacters
ContainsNonWhitespaceCharacters :: ContainsNonWhitespaceCharacters
exactLengthRefinedToRange :: Refined (ContainsNonWhitespaceCharacters && SizeEqualTo n) Text -> NonEmptyText n
nonEmptyTextFromRefined :: Refined (ContainsNonWhitespaceCharacters && (SizeLessThan n || SizeEqualTo n)) Text -> NonEmptyText n
refinedFromNonEmptyText :: NonEmptyText n -> Refined (ContainsNonWhitespaceCharacters && (SizeLessThan n || SizeEqualTo n)) Text
-- | Whitespace-trimmed, non-empty text, for use with API endpoints. The
-- rationale is that there are many situations where if a client sends
-- text that is empty or all whitespace, there's probably a client error.
-- Not suitable for database fields, as there is no character limit (see
-- ProsePersistFieldMsg).
data Prose
mkProse :: Text -> Maybe Prose
compileProse :: QuasiQuoter
proseToText :: Prose -> Text
proseFromNonEmptyText :: NonEmptyText n -> Prose
-- | Newtype wrapper around Maybe NonEmptyText that converts empty string
-- to Nothing.
--
-- This is aimed primarily at JSON parsing: make it possible to parse
-- empty string and turn it into Nothing, in order to convert
-- everything into Maybe NonEmptyText at the edge of the system.
--
-- While using this for JSON parsing, use Maybe
-- NullableNonEmptyText. Aeson special-cases Maybe to allow
-- nulls, so Maybe catches the nulls and
-- NullableNonEmptyText catches the empty strings.
--
-- To extract Maybe NonEmptyText values from Maybe
-- NullableNonEmptyText, use
-- nullableNonEmptyTextToMaybeNonEmptyText.
newtype NullableNonEmptyText n
NullableNonEmptyText :: Maybe (NonEmptyText n) -> NullableNonEmptyText n
mkNullableNonEmptyText :: forall n. (KnownNat n, 1 <= n) => Text -> Maybe (NullableNonEmptyText n)
nullNonEmptyText :: NullableNonEmptyText n
compileNullableNonEmptyText :: Integer -> QuasiQuoter
nonEmptyTextToNullable :: NonEmptyText n -> NullableNonEmptyText n
maybeNonEmptyTextToNullable :: Maybe (NonEmptyText n) -> NullableNonEmptyText n
nullableNonEmptyTextToMaybeText :: NullableNonEmptyText n -> Maybe Text
nullableNonEmptyTextToMaybeNonEmptyText :: NullableNonEmptyText n -> Maybe (NonEmptyText n)
parseNullableNonEmptyText :: (KnownNat n, 1 <= n) => Text -> Object -> Parser (NullableNonEmptyText n)
fromMaybeNullableText :: Maybe (NullableNonEmptyText n) -> NullableNonEmptyText n
isNullNonEmptyText :: NullableNonEmptyText n -> Bool