-- 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.1.0.0
-- | 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
compileProse :: QuasiQuoter
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
proseToText :: Prose -> Text
module Data.StringVariants.Util
natOfLength :: proxy (n :: Nat) -> f (other n) -> f (other n)
useNat :: Integer -> (forall n proxy. KnownNat n => proxy n -> x) -> x
textIsTooLong :: Text -> Int -> Bool
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 => Text -> Maybe (NonEmptyText n)
-- | Make a NonEmptyText when you can manually verify the length
unsafeMkNonEmptyText :: forall n. KnownNat 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 => 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 => Test.QuickCheck.Arbitrary.Arbitrary (Data.StringVariants.NonEmptyText.Internal.NonEmptyText n)
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 => Text -> Maybe (NonEmptyText n)
-- | Make a NonEmptyText when you can manually verify the length
unsafeMkNonEmptyText :: forall n. KnownNat n => Text -> NonEmptyText n
nonEmptyTextToText :: NonEmptyText n -> Text
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
-- | Narrows the maximum length, dropping any remaining trailing
-- characters.
takeNonEmptyText :: forall m n. (KnownNat m, KnownNat n, n <= m) => NonEmptyText m -> NonEmptyText n
-- | Narrows the maximum length, dropping any prefix remaining characters.
takeNonEmptyTextEnd :: forall m n. (KnownNat m, KnownNat n, n <= m) => NonEmptyText m -> NonEmptyText n
-- | O(n) Splits a NonEmptyText into components of length
-- chunkSize. The last element may be shorter than the other
-- chunks, depending on the length of the input.
chunksOfNonEmptyText :: forall chunkSize totalSize. (KnownNat chunkSize, KnownNat totalSize) => NonEmptyText totalSize -> [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.
filterNonEmptyText :: (Char -> Bool) -> NonEmptyText n -> 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
useNat :: Integer -> (forall n proxy. KnownNat n => proxy n -> x) -> x
natOfLength :: proxy (n :: Nat) -> f (other n) -> f (other n)
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 => Text -> Maybe (NonEmptyText n)
compileNullableNonEmptyText :: Integer -> QuasiQuoter
mkNullableNonEmptyText :: forall n. KnownNat n => Text -> Maybe (NullableNonEmptyText n)
parseNullableNonEmptyText :: KnownNat n => Text -> Object -> Parser (NullableNonEmptyText n)
nullNonEmptyText :: NullableNonEmptyText n
maybeTextToTruncateNullableNonEmptyText :: forall n. KnownNat 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 => 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 => Text -> Maybe (NonEmptyText n)
-- | Make a NonEmptyText when you can manually verify the length
unsafeMkNonEmptyText :: forall n. KnownNat n => Text -> NonEmptyText n
mkNonEmptyTextWithTruncate :: forall n. KnownNat n => Text -> Maybe (NonEmptyText n)
compileNonEmptyText :: Integer -> QuasiQuoter
compileNonEmptyTextKnownLength :: QuasiQuoter
nonEmptyTextToText :: NonEmptyText n -> Text
convertEmptyTextToNothing :: Text -> Maybe Text
maybeTextToTruncateNullableNonEmptyText :: forall n. KnownNat 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, n <= m) => NonEmptyText m -> NonEmptyText n
-- | Narrows the maximum length, dropping any prefix remaining characters.
takeNonEmptyTextEnd :: forall m n. (KnownNat m, KnownNat n, n <= m) => NonEmptyText m -> NonEmptyText n
-- | O(n) Splits a NonEmptyText into components of length
-- chunkSize. The last element may be shorter than the other
-- chunks, depending on the length of the input.
chunksOfNonEmptyText :: forall chunkSize totalSize. (KnownNat chunkSize, KnownNat totalSize) => NonEmptyText totalSize -> [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.
filterNonEmptyText :: (Char -> Bool) -> NonEmptyText n -> 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
-- | 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 => 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 => Text -> Object -> Parser (NullableNonEmptyText n)
fromMaybeNullableText :: Maybe (NullableNonEmptyText n) -> NullableNonEmptyText n
isNullNonEmptyText :: NullableNonEmptyText n -> Bool
useNat :: Integer -> (forall n proxy. KnownNat n => proxy n -> x) -> x
natOfLength :: proxy (n :: Nat) -> f (other n) -> f (other n)