string-variants-0.1.0.1: Constrained text newtypes
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.StringVariants

Synopsis

Non empty text

data NonEmptyText (n :: Nat) Source #

Non Empty Text, requires the input is between 1 and n chars and not just whitespace.

Instances

Instances details
KnownNat n => Arbitrary (NonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

KnownNat n => FromJSON (NonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

ToJSON (NonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

Semigroup (NonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

Generic (NonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

Associated Types

type Rep (NonEmptyText n) :: Type -> Type #

Methods

from :: NonEmptyText n -> Rep (NonEmptyText n) x #

to :: Rep (NonEmptyText n) x -> NonEmptyText n #

Read (NonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

Show (NonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

Eq (NonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

Ord (NonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

MonoFoldable (NonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

Methods

ofoldMap :: Monoid m => (Element (NonEmptyText n) -> m) -> NonEmptyText n -> m #

ofoldr :: (Element (NonEmptyText n) -> b -> b) -> b -> NonEmptyText n -> b #

ofoldl' :: (a -> Element (NonEmptyText n) -> a) -> a -> NonEmptyText n -> a #

otoList :: NonEmptyText n -> [Element (NonEmptyText n)] #

oall :: (Element (NonEmptyText n) -> Bool) -> NonEmptyText n -> Bool #

oany :: (Element (NonEmptyText n) -> Bool) -> NonEmptyText n -> Bool #

onull :: NonEmptyText n -> Bool #

olength :: NonEmptyText n -> Int #

olength64 :: NonEmptyText n -> Int64 #

ocompareLength :: Integral i => NonEmptyText n -> i -> Ordering #

otraverse_ :: Applicative f => (Element (NonEmptyText n) -> f b) -> NonEmptyText n -> f () #

ofor_ :: Applicative f => NonEmptyText n -> (Element (NonEmptyText n) -> f b) -> f () #

omapM_ :: Applicative m => (Element (NonEmptyText n) -> m ()) -> NonEmptyText n -> m () #

oforM_ :: Applicative m => NonEmptyText n -> (Element (NonEmptyText n) -> m ()) -> m () #

ofoldlM :: Monad m => (a -> Element (NonEmptyText n) -> m a) -> a -> NonEmptyText n -> m a #

ofoldMap1Ex :: Semigroup m => (Element (NonEmptyText n) -> m) -> NonEmptyText n -> m #

ofoldr1Ex :: (Element (NonEmptyText n) -> Element (NonEmptyText n) -> Element (NonEmptyText n)) -> NonEmptyText n -> Element (NonEmptyText n) #

ofoldl1Ex' :: (Element (NonEmptyText n) -> Element (NonEmptyText n) -> Element (NonEmptyText n)) -> NonEmptyText n -> Element (NonEmptyText n) #

headEx :: NonEmptyText n -> Element (NonEmptyText n) #

lastEx :: NonEmptyText n -> Element (NonEmptyText n) #

unsafeHead :: NonEmptyText n -> Element (NonEmptyText n) #

unsafeLast :: NonEmptyText n -> Element (NonEmptyText n) #

maximumByEx :: (Element (NonEmptyText n) -> Element (NonEmptyText n) -> Ordering) -> NonEmptyText n -> Element (NonEmptyText n) #

minimumByEx :: (Element (NonEmptyText n) -> Element (NonEmptyText n) -> Ordering) -> NonEmptyText n -> Element (NonEmptyText n) #

oelem :: Element (NonEmptyText n) -> NonEmptyText n -> Bool #

onotElem :: Element (NonEmptyText n) -> NonEmptyText n -> Bool #

ConvertibleStrings (NonEmptyText n) ByteString Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

ConvertibleStrings (NonEmptyText n) Text Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

ConvertibleStrings (NonEmptyText n) String Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

Lift (NonEmptyText n :: TYPE LiftedRep) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

Methods

lift :: Quote m => NonEmptyText n -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => NonEmptyText n -> Code m (NonEmptyText n) #

type Rep (NonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

type Rep (NonEmptyText n) = D1 ('MetaData "NonEmptyText" "Data.StringVariants.NonEmptyText.Internal" "string-variants-0.1.0.1-FzKJzNbSMeN1B3zsrHPi9w" 'True) (C1 ('MetaCons "NonEmptyText" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))
type Element (NonEmptyText _n) Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText.Internal

Constructing

unsafeMkNonEmptyText :: forall n. KnownNat n => Text -> NonEmptyText n Source #

Make a NonEmptyText when you can manually verify the length

Converting

type (<=) (x :: k) (y :: k) = (x <=? y) ~ 'True infix 4 #

Comparison (<=) of comparable types, as a constraint.

Since: base-4.16.0.0

widen :: (1 <= n, n <= m) => NonEmptyText n -> NonEmptyText m Source #

Converts a NonEmptyText to a wider NonEmptyText

Operations

takeNonEmptyText :: forall m n. (KnownNat m, KnownNat n, n <= m) => NonEmptyText m -> NonEmptyText n Source #

Narrows the maximum length, dropping any remaining trailing characters.

takeNonEmptyTextEnd :: forall m n. (KnownNat m, KnownNat n, n <= m) => NonEmptyText m -> NonEmptyText n Source #

Narrows the maximum length, dropping any prefix remaining characters.

chunksOfNonEmptyText :: forall chunkSize totalSize. (KnownNat chunkSize, KnownNat totalSize) => NonEmptyText totalSize -> [NonEmptyText chunkSize] Source #

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.

filterNonEmptyText :: (Char -> Bool) -> NonEmptyText n -> NonEmptyText n Source #

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.

(<>|) :: NonEmptyText n -> NonEmptyText m -> NonEmptyText (n + m) Source #

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

Conversions between Refined and NonEmptyText.

data ContainsNonWhitespaceCharacters Source #

Instances

Instances details
Generic ContainsNonWhitespaceCharacters Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText

Associated Types

type Rep ContainsNonWhitespaceCharacters :: Type -> Type #

Predicate ContainsNonWhitespaceCharacters Text Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText

type Rep ContainsNonWhitespaceCharacters Source # 
Instance details

Defined in Data.StringVariants.NonEmptyText

type Rep ContainsNonWhitespaceCharacters = D1 ('MetaData "ContainsNonWhitespaceCharacters" "Data.StringVariants.NonEmptyText" "string-variants-0.1.0.1-FzKJzNbSMeN1B3zsrHPi9w" 'False) (C1 ('MetaCons "ContainsNonWhitespaceCharacters" 'PrefixI 'False) (U1 :: Type -> Type))

Non-empty, whitespace-trimmed text with no character limit

data Prose Source #

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).

Instances

Instances details
FromJSON Prose Source # 
Instance details

Defined in Data.StringVariants.Prose.Internal

ToJSON Prose Source # 
Instance details

Defined in Data.StringVariants.Prose.Internal

ToJSONKey Prose Source # 
Instance details

Defined in Data.StringVariants.Prose.Internal

Semigroup Prose Source # 
Instance details

Defined in Data.StringVariants.Prose.Internal

Methods

(<>) :: Prose -> Prose -> Prose #

sconcat :: NonEmpty Prose -> Prose #

stimes :: Integral b => b -> Prose -> Prose #

Show Prose Source # 
Instance details

Defined in Data.StringVariants.Prose.Internal

Methods

showsPrec :: Int -> Prose -> ShowS #

show :: Prose -> String #

showList :: [Prose] -> ShowS #

Eq Prose Source # 
Instance details

Defined in Data.StringVariants.Prose.Internal

Methods

(==) :: Prose -> Prose -> Bool #

(/=) :: Prose -> Prose -> Bool #

Ord Prose Source # 
Instance details

Defined in Data.StringVariants.Prose.Internal

Methods

compare :: Prose -> Prose -> Ordering #

(<) :: Prose -> Prose -> Bool #

(<=) :: Prose -> Prose -> Bool #

(>) :: Prose -> Prose -> Bool #

(>=) :: Prose -> Prose -> Bool #

max :: Prose -> Prose -> Prose #

min :: Prose -> Prose -> Prose #

ConvertibleStrings Prose Text Source # 
Instance details

Defined in Data.StringVariants.Prose.Internal

Methods

convertString :: Prose -> Text #

ConvertibleStrings Prose Text Source # 
Instance details

Defined in Data.StringVariants.Prose.Internal

Methods

convertString :: Prose -> Text #

Lift Prose Source # 
Instance details

Defined in Data.StringVariants.Prose.Internal

Methods

lift :: Quote m => Prose -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => Prose -> Code m Prose #

Nullable non empty text

newtype NullableNonEmptyText n Source #

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.

Instances

Instances details
KnownNat n => FromJSON (NullableNonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NullableNonEmptyText

ToJSON (NullableNonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NullableNonEmptyText

Generic (NullableNonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NullableNonEmptyText

Associated Types

type Rep (NullableNonEmptyText n) :: Type -> Type #

Read (NullableNonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NullableNonEmptyText

Show (NullableNonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NullableNonEmptyText

Eq (NullableNonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NullableNonEmptyText

Lift (NullableNonEmptyText n :: TYPE LiftedRep) Source # 
Instance details

Defined in Data.StringVariants.NullableNonEmptyText

Methods

lift :: Quote m => NullableNonEmptyText n -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => NullableNonEmptyText n -> Code m (NullableNonEmptyText n) #

type Rep (NullableNonEmptyText n) Source # 
Instance details

Defined in Data.StringVariants.NullableNonEmptyText

type Rep (NullableNonEmptyText n) = D1 ('MetaData "NullableNonEmptyText" "Data.StringVariants.NullableNonEmptyText" "string-variants-0.1.0.1-FzKJzNbSMeN1B3zsrHPi9w" 'True) (C1 ('MetaCons "NullableNonEmptyText" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (NonEmptyText n)))))

Converting

Information

Convenience util if you need a NonEmptyText of a dynamically determined lengths

useNat :: Integer -> (forall n proxy. KnownNat n => proxy n -> x) -> x Source #

natOfLength :: proxy (n :: Nat) -> f (other n) -> f (other n) Source #