-- |'Scheme' names consist of a non-empty sequence of characters
-- beginning with a letter and followed by any combination of letters,
--- digits, plus (\'+\'), period (\'.\'), or hyphen (\'-\'):
+-- digits, plus (\'+\'), period (\'.\'), or hyphen (\'-\'). Comparison
+-- of 'Scheme's are always case-insensitive. See:
-- <http://tools.ietf.org/html/rfc3986#section-3.1>
newtype Scheme = Scheme CIAscii
deriving ( Eq
, Typeable
)
--- |'isString' is a fast but unsafe way to create 'Scheme' such that
+-- |'fromString' is a fast but unsafe way to create 'Scheme' such that
-- no validation on the string is performed.
deriving instance IsString Scheme
{-# INLINE fromBS #-}
fromBS = Scheme ∘ A.toCIAscii ∘ A.unsafeFromByteString
+-- |Extract a 'CIAscii' with all letters lowercased.
instance ConvertSuccess Scheme CIAscii where
{-# INLINE convertSuccess #-}
convertSuccess (Scheme s) = foldCase s
+-- |Create an 'AsciiBuilder' with all letters lowercased.
instance ConvertSuccess Scheme AsciiBuilder where
{-# INLINE convertSuccess #-}
convertSuccess = A.toAsciiBuilder ∘ A.fromCIAscii ∘ cs
+-- |Try to parse a 'Scheme' from 'CIAscii'.
instance ConvertAttempt CIAscii Scheme where
{-# INLINE convertAttempt #-}
convertAttempt = parseAttempt' def ∘ A.fromCIAscii