Copyright | © 2017–present Mark Karpov |
---|---|
License | BSD 3 clause |
Maintainer | Mark Karpov <markkarpov92@gmail.com> |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Text.URI
Description
This is a modern library for working with URIs as per RFC 3986:
https://tools.ietf.org/html/rfc3986
This module is intended to be imported qualified, e.g.:
import Text.URI (URI) import qualified Text.URI as URI
See also Text.URI.Lens for lens, prisms, and traversals; see Text.URI.QQ for quasi-quoters for compile-time validation of URIs and refined text components.
Synopsis
- data URI = URI {
- uriScheme :: Maybe (RText 'Scheme)
- uriAuthority :: Either Bool Authority
- uriPath :: Maybe (Bool, NonEmpty (RText 'PathPiece))
- uriQuery :: [QueryParam]
- uriFragment :: Maybe (RText 'Fragment)
- mkURI :: MonadThrow m => Text -> m URI
- mkURIBs :: MonadThrow m => ByteString -> m URI
- emptyURI :: URI
- makeAbsolute :: RText 'Scheme -> URI -> URI
- isPathAbsolute :: URI -> Bool
- relativeTo :: URI -> URI -> Maybe URI
- data Authority = Authority {}
- data UserInfo = UserInfo {
- uiUsername :: RText 'Username
- uiPassword :: Maybe (RText 'Password)
- data QueryParam
- = QueryFlag (RText 'QueryKey)
- | QueryParam (RText 'QueryKey) (RText 'QueryValue)
- newtype ParseException = ParseException (ParseErrorBundle Text Void)
- newtype ParseExceptionBs = ParseExceptionBs (ParseErrorBundle ByteString Void)
- data RText (l :: RTextLabel)
- data RTextLabel
- mkScheme :: MonadThrow m => Text -> m (RText 'Scheme)
- mkHost :: MonadThrow m => Text -> m (RText 'Host)
- mkUsername :: MonadThrow m => Text -> m (RText 'Username)
- mkPassword :: MonadThrow m => Text -> m (RText 'Password)
- mkPathPiece :: MonadThrow m => Text -> m (RText 'PathPiece)
- mkQueryKey :: MonadThrow m => Text -> m (RText 'QueryKey)
- mkQueryValue :: MonadThrow m => Text -> m (RText 'QueryValue)
- mkFragment :: MonadThrow m => Text -> m (RText 'Fragment)
- unRText :: RText l -> Text
- data RTextException = RTextException RTextLabel Text
- parser :: MonadParsec e Text m => m URI
- parserBs :: MonadParsec e ByteString m => m URI
- render :: URI -> Text
- render' :: URI -> Builder
- renderBs :: URI -> ByteString
- renderBs' :: URI -> Builder
- renderStr :: URI -> String
- renderStr' :: URI -> ShowS
Data types
Uniform resource identifier (URI) reference. We use refined Text
(
) here because information is presented in human-readable
form, i.e. percent-decoded, and thus it may contain Unicode characters.RText
l
Constructors
URI | |
Fields
|
Instances
Arbitrary URI Source # | |
Data URI Source # | |
Defined in Text.URI.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> URI -> c URI gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c URI dataTypeOf :: URI -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c URI) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c URI) gmapT :: (forall b. Data b => b -> b) -> URI -> URI gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> URI -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> URI -> r gmapQ :: (forall d. Data d => d -> u) -> URI -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> URI -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> URI -> m URI gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> URI -> m URI gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> URI -> m URI | |
Generic URI Source # | |
Show URI Source # | |
NFData URI Source # | |
Defined in Text.URI.Types | |
Eq URI Source # | |
Ord URI Source # | |
Hashable URI Source # | Since: 0.3.5.0 |
Defined in Text.URI.Types | |
Lift URI Source # | Since: 0.3.1.0 |
type Rep URI Source # | |
Defined in Text.URI.Types type Rep URI = D1 ('MetaData "URI" "Text.URI.Types" "modern-uri-0.3.6.0-6vou5yoHQVY7WbNjeoUTle" 'False) (C1 ('MetaCons "URI" 'PrefixI 'True) ((S1 ('MetaSel ('Just "uriScheme") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (RText 'Scheme))) :*: S1 ('MetaSel ('Just "uriAuthority") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Either Bool Authority))) :*: (S1 ('MetaSel ('Just "uriPath") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Bool, NonEmpty (RText 'PathPiece)))) :*: (S1 ('MetaSel ('Just "uriQuery") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [QueryParam]) :*: S1 ('MetaSel ('Just "uriFragment") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (RText 'Fragment))))))) |
mkURI :: MonadThrow m => Text -> m URI Source #
Construct a URI
from Text
. The input you pass to mkURI
must be a
valid URI as per RFC 3986, that is, its components should be
percent-encoded where necessary. In case of parse failure
ParseException
is thrown.
This function uses the parser
parser under the hood, which you can also
use directly in a Megaparsec parser.
mkURIBs :: MonadThrow m => ByteString -> m URI Source #
Construct a URI
from ByteString
. The input you pass to mkURIBs
must be a valid URI as per RFC 3986, that is, its components should be
percent-encoded where necessary. In case of parse failure
ParseExceptionBs
is thrown.
This function uses the parserBs
parser under the hood, which you can also
use directly in a Megaparsec parser.
Since: 0.3.3.0
isPathAbsolute :: URI -> Bool Source #
Return True
if path in a given URI
is absolute.
Since: 0.1.0.0
makes the relativeTo
reference basereference
URI
absolute
resolving it against the base
URI
.
If the base URI
is not absolute itself (that is, it has no scheme),
this function returns Nothing
.
See also: https://tools.ietf.org/html/rfc3986#section-5.2.
Since: 0.2.0.0
Authority component of URI
.
Constructors
Authority | |
Instances
Arbitrary Authority Source # | |
Data Authority Source # | |
Defined in Text.URI.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Authority -> c Authority gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Authority toConstr :: Authority -> Constr dataTypeOf :: Authority -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Authority) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Authority) gmapT :: (forall b. Data b => b -> b) -> Authority -> Authority gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Authority -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Authority -> r gmapQ :: (forall d. Data d => d -> u) -> Authority -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> Authority -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> Authority -> m Authority gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Authority -> m Authority gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Authority -> m Authority | |
Generic Authority Source # | |
Show Authority Source # | |
NFData Authority Source # | |
Defined in Text.URI.Types | |
Eq Authority Source # | |
Ord Authority Source # | |
Defined in Text.URI.Types | |
Hashable Authority Source # | Since: 0.3.5.0 |
Defined in Text.URI.Types | |
Lift Authority Source # | Since: 0.3.1.0 |
type Rep Authority Source # | |
Defined in Text.URI.Types type Rep Authority = D1 ('MetaData "Authority" "Text.URI.Types" "modern-uri-0.3.6.0-6vou5yoHQVY7WbNjeoUTle" 'False) (C1 ('MetaCons "Authority" 'PrefixI 'True) (S1 ('MetaSel ('Just "authUserInfo") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe UserInfo)) :*: (S1 ('MetaSel ('Just "authHost") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (RText 'Host)) :*: S1 ('MetaSel ('Just "authPort") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Word))))) |
User info as a combination of username and password.
Constructors
UserInfo | |
Fields
|
Instances
Arbitrary UserInfo Source # | |
Data UserInfo Source # | |
Defined in Text.URI.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> UserInfo -> c UserInfo gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c UserInfo toConstr :: UserInfo -> Constr dataTypeOf :: UserInfo -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c UserInfo) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c UserInfo) gmapT :: (forall b. Data b => b -> b) -> UserInfo -> UserInfo gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> UserInfo -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> UserInfo -> r gmapQ :: (forall d. Data d => d -> u) -> UserInfo -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> UserInfo -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> UserInfo -> m UserInfo gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> UserInfo -> m UserInfo gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> UserInfo -> m UserInfo | |
Generic UserInfo Source # | |
Show UserInfo Source # | |
NFData UserInfo Source # | |
Defined in Text.URI.Types | |
Eq UserInfo Source # | |
Ord UserInfo Source # | |
Hashable UserInfo Source # | Since: 0.3.5.0 |
Defined in Text.URI.Types | |
Lift UserInfo Source # | Since: 0.3.1.0 |
type Rep UserInfo Source # | |
Defined in Text.URI.Types type Rep UserInfo = D1 ('MetaData "UserInfo" "Text.URI.Types" "modern-uri-0.3.6.0-6vou5yoHQVY7WbNjeoUTle" 'False) (C1 ('MetaCons "UserInfo" 'PrefixI 'True) (S1 ('MetaSel ('Just "uiUsername") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (RText 'Username)) :*: S1 ('MetaSel ('Just "uiPassword") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (RText 'Password))))) |
data QueryParam Source #
Query parameter either in the form of flag or as a pair of key and value. A key cannot be empty, while a value can.
Constructors
QueryFlag (RText 'QueryKey) | Flag parameter |
QueryParam (RText 'QueryKey) (RText 'QueryValue) | Key–value pair |
Instances
Arbitrary QueryParam Source # | |
Defined in Text.URI.Types | |
Data QueryParam Source # | |
Defined in Text.URI.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> QueryParam -> c QueryParam gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c QueryParam toConstr :: QueryParam -> Constr dataTypeOf :: QueryParam -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c QueryParam) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c QueryParam) gmapT :: (forall b. Data b => b -> b) -> QueryParam -> QueryParam gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> QueryParam -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> QueryParam -> r gmapQ :: (forall d. Data d => d -> u) -> QueryParam -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> QueryParam -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> QueryParam -> m QueryParam gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> QueryParam -> m QueryParam gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> QueryParam -> m QueryParam | |
Generic QueryParam Source # | |
Defined in Text.URI.Types Associated Types type Rep QueryParam :: Type -> Type | |
Show QueryParam Source # | |
Defined in Text.URI.Types Methods showsPrec :: Int -> QueryParam -> ShowS show :: QueryParam -> String showList :: [QueryParam] -> ShowS | |
NFData QueryParam Source # | |
Defined in Text.URI.Types Methods rnf :: QueryParam -> () | |
Eq QueryParam Source # | |
Defined in Text.URI.Types | |
Ord QueryParam Source # | |
Defined in Text.URI.Types Methods compare :: QueryParam -> QueryParam -> Ordering (<) :: QueryParam -> QueryParam -> Bool (<=) :: QueryParam -> QueryParam -> Bool (>) :: QueryParam -> QueryParam -> Bool (>=) :: QueryParam -> QueryParam -> Bool max :: QueryParam -> QueryParam -> QueryParam min :: QueryParam -> QueryParam -> QueryParam | |
Hashable QueryParam Source # | Since: 0.3.5.0 |
Defined in Text.URI.Types | |
Lift QueryParam Source # | Since: 0.3.1.0 |
Defined in Text.URI.Types Methods lift :: Quote m => QueryParam -> m Exp liftTyped :: forall (m :: Type -> Type). Quote m => QueryParam -> Code m QueryParam | |
type Rep QueryParam Source # | |
Defined in Text.URI.Types type Rep QueryParam = D1 ('MetaData "QueryParam" "Text.URI.Types" "modern-uri-0.3.6.0-6vou5yoHQVY7WbNjeoUTle" 'False) (C1 ('MetaCons "QueryFlag" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (RText 'QueryKey))) :+: C1 ('MetaCons "QueryParam" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (RText 'QueryKey)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (RText 'QueryValue)))) |
newtype ParseException Source #
Parse exception thrown by mkURI
when a given Text
value cannot be
parsed as a URI
.
Constructors
ParseException (ParseErrorBundle Text Void) | Arguments are: original input and parse error |
Instances
Data ParseException Source # | |
Defined in Text.URI.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ParseException -> c ParseException gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ParseException toConstr :: ParseException -> Constr dataTypeOf :: ParseException -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ParseException) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ParseException) gmapT :: (forall b. Data b => b -> b) -> ParseException -> ParseException gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ParseException -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ParseException -> r gmapQ :: (forall d. Data d => d -> u) -> ParseException -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> ParseException -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> ParseException -> m ParseException gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ParseException -> m ParseException gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ParseException -> m ParseException | |
Exception ParseException Source # | |
Defined in Text.URI.Types Methods toException :: ParseException -> SomeException fromException :: SomeException -> Maybe ParseException displayException :: ParseException -> String | |
Generic ParseException Source # | |
Defined in Text.URI.Types Associated Types type Rep ParseException :: Type -> Type | |
Show ParseException Source # | |
Defined in Text.URI.Types Methods showsPrec :: Int -> ParseException -> ShowS show :: ParseException -> String showList :: [ParseException] -> ShowS | |
NFData ParseException Source # | |
Defined in Text.URI.Types Methods rnf :: ParseException -> () | |
Eq ParseException Source # | |
Defined in Text.URI.Types Methods (==) :: ParseException -> ParseException -> Bool (/=) :: ParseException -> ParseException -> Bool | |
type Rep ParseException Source # | |
Defined in Text.URI.Types type Rep ParseException = D1 ('MetaData "ParseException" "Text.URI.Types" "modern-uri-0.3.6.0-6vou5yoHQVY7WbNjeoUTle" 'True) (C1 ('MetaCons "ParseException" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ParseErrorBundle Text Void)))) |
newtype ParseExceptionBs Source #
Parse exception thrown by mkURIBs
when a given ByteString
value cannot be
parsed as a URI
.
Since: 0.3.3.0
Constructors
ParseExceptionBs (ParseErrorBundle ByteString Void) | Arguments are: original input and parse error |
Instances
Data ParseExceptionBs Source # | |
Defined in Text.URI.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ParseExceptionBs -> c ParseExceptionBs gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ParseExceptionBs toConstr :: ParseExceptionBs -> Constr dataTypeOf :: ParseExceptionBs -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ParseExceptionBs) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ParseExceptionBs) gmapT :: (forall b. Data b => b -> b) -> ParseExceptionBs -> ParseExceptionBs gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ParseExceptionBs -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ParseExceptionBs -> r gmapQ :: (forall d. Data d => d -> u) -> ParseExceptionBs -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> ParseExceptionBs -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> ParseExceptionBs -> m ParseExceptionBs gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ParseExceptionBs -> m ParseExceptionBs gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ParseExceptionBs -> m ParseExceptionBs | |
Exception ParseExceptionBs Source # | |
Defined in Text.URI.Types Methods toException :: ParseExceptionBs -> SomeException fromException :: SomeException -> Maybe ParseExceptionBs displayException :: ParseExceptionBs -> String | |
Generic ParseExceptionBs Source # | |
Defined in Text.URI.Types Associated Types type Rep ParseExceptionBs :: Type -> Type Methods from :: ParseExceptionBs -> Rep ParseExceptionBs x to :: Rep ParseExceptionBs x -> ParseExceptionBs | |
Show ParseExceptionBs Source # | |
Defined in Text.URI.Types Methods showsPrec :: Int -> ParseExceptionBs -> ShowS show :: ParseExceptionBs -> String showList :: [ParseExceptionBs] -> ShowS | |
NFData ParseExceptionBs Source # | |
Defined in Text.URI.Types Methods rnf :: ParseExceptionBs -> () | |
Eq ParseExceptionBs Source # | |
Defined in Text.URI.Types Methods (==) :: ParseExceptionBs -> ParseExceptionBs -> Bool (/=) :: ParseExceptionBs -> ParseExceptionBs -> Bool | |
type Rep ParseExceptionBs Source # | |
Defined in Text.URI.Types type Rep ParseExceptionBs = D1 ('MetaData "ParseExceptionBs" "Text.URI.Types" "modern-uri-0.3.6.0-6vou5yoHQVY7WbNjeoUTle" 'True) (C1 ('MetaCons "ParseExceptionBs" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ParseErrorBundle ByteString Void)))) |
Refined text
Refined text values can only be created by using the smart constructors
listed below, such as mkScheme
. This eliminates the possibility of
having an invalid component in URI
which could invalidate the whole
URI
.
Note that the refined text RText
type is labelled at the type level
with RTextLabel
s, which see.
When an invalid Text
value is passed to a smart constructor,
it rejects it by throwing the RTextException
. Remember that the Maybe
datatype is also an instance of MonadThrow
, and so
one could as well use the smart constructors in the Maybe
monad.
data RText (l :: RTextLabel) Source #
Refined text labelled at the type level.
Instances
Typeable l => Lift (RText l :: Type) Source # | Since: 0.3.1.0 |
Arbitrary (RText 'Fragment) Source # | |
Arbitrary (RText 'Host) Source # | |
Arbitrary (RText 'Password) Source # | |
Arbitrary (RText 'PathPiece) Source # | |
Arbitrary (RText 'QueryKey) Source # | |
Arbitrary (RText 'QueryValue) Source # | |
Defined in Text.URI.Types | |
Arbitrary (RText 'Scheme) Source # | |
Arbitrary (RText 'Username) Source # | |
Typeable l => Data (RText l) Source # | |
Defined in Text.URI.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> RText l -> c (RText l) gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (RText l) dataTypeOf :: RText l -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (RText l)) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (RText l)) gmapT :: (forall b. Data b => b -> b) -> RText l -> RText l gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RText l -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RText l -> r gmapQ :: (forall d. Data d => d -> u) -> RText l -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> RText l -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> RText l -> m (RText l) gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> RText l -> m (RText l) gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> RText l -> m (RText l) | |
Generic (RText l) Source # | |
Show (RText l) Source # | |
NFData (RText l) Source # | |
Defined in Text.URI.Types | |
Eq (RText l) Source # | |
Ord (RText l) Source # | |
Hashable (RText l) Source # | Since: 0.3.5.0 |
Defined in Text.URI.Types | |
type Rep (RText l) Source # | |
Defined in Text.URI.Types type Rep (RText l) = D1 ('MetaData "RText" "Text.URI.Types" "modern-uri-0.3.6.0-6vou5yoHQVY7WbNjeoUTle" 'True) (C1 ('MetaCons "RText" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text))) |
data RTextLabel Source #
Refined text labels.
Constructors
Scheme | See |
Host | See |
Username | See |
Password | See |
PathPiece | See |
QueryKey | See |
QueryValue | See |
Fragment | See |
Instances
Data RTextLabel Source # | |
Defined in Text.URI.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> RTextLabel -> c RTextLabel gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c RTextLabel toConstr :: RTextLabel -> Constr dataTypeOf :: RTextLabel -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c RTextLabel) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RTextLabel) gmapT :: (forall b. Data b => b -> b) -> RTextLabel -> RTextLabel gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RTextLabel -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RTextLabel -> r gmapQ :: (forall d. Data d => d -> u) -> RTextLabel -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> RTextLabel -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> RTextLabel -> m RTextLabel gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> RTextLabel -> m RTextLabel gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> RTextLabel -> m RTextLabel | |
Generic RTextLabel Source # | |
Defined in Text.URI.Types Associated Types type Rep RTextLabel :: Type -> Type | |
Show RTextLabel Source # | |
Defined in Text.URI.Types Methods showsPrec :: Int -> RTextLabel -> ShowS show :: RTextLabel -> String showList :: [RTextLabel] -> ShowS | |
Eq RTextLabel Source # | |
Defined in Text.URI.Types | |
Ord RTextLabel Source # | |
Defined in Text.URI.Types Methods compare :: RTextLabel -> RTextLabel -> Ordering (<) :: RTextLabel -> RTextLabel -> Bool (<=) :: RTextLabel -> RTextLabel -> Bool (>) :: RTextLabel -> RTextLabel -> Bool (>=) :: RTextLabel -> RTextLabel -> Bool max :: RTextLabel -> RTextLabel -> RTextLabel min :: RTextLabel -> RTextLabel -> RTextLabel | |
type Rep RTextLabel Source # | |
Defined in Text.URI.Types type Rep RTextLabel = D1 ('MetaData "RTextLabel" "Text.URI.Types" "modern-uri-0.3.6.0-6vou5yoHQVY7WbNjeoUTle" 'False) (((C1 ('MetaCons "Scheme" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Host" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Username" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Password" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "PathPiece" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "QueryKey" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "QueryValue" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Fragment" 'PrefixI 'False) (U1 :: Type -> Type)))) |
mkScheme :: MonadThrow m => Text -> m (RText 'Scheme) Source #
mkUsername :: MonadThrow m => Text -> m (RText 'Username) Source #
mkPassword :: MonadThrow m => Text -> m (RText 'Password) Source #
mkPathPiece :: MonadThrow m => Text -> m (RText 'PathPiece) Source #
mkQueryKey :: MonadThrow m => Text -> m (RText 'QueryKey) Source #
Lift a Text
value into 'RText
.QueryKey
This smart constructor does not perform any sort of normalization.
mkQueryValue :: MonadThrow m => Text -> m (RText 'QueryValue) Source #
Lift a Text
value into
.RText
QueryValue
This smart constructor does not perform any sort of normalization.
mkFragment :: MonadThrow m => Text -> m (RText 'Fragment) Source #
data RTextException Source #
The exception is thrown when a refined
value cannot be
constructed due to the fact that given RText
lText
value is not correct.
Constructors
RTextException RTextLabel Text |
|
Instances
Data RTextException Source # | |
Defined in Text.URI.Types Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> RTextException -> c RTextException gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c RTextException toConstr :: RTextException -> Constr dataTypeOf :: RTextException -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c RTextException) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c RTextException) gmapT :: (forall b. Data b => b -> b) -> RTextException -> RTextException gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> RTextException -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> RTextException -> r gmapQ :: (forall d. Data d => d -> u) -> RTextException -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> RTextException -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> RTextException -> m RTextException gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> RTextException -> m RTextException gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> RTextException -> m RTextException | |
Exception RTextException Source # | |
Defined in Text.URI.Types Methods toException :: RTextException -> SomeException fromException :: SomeException -> Maybe RTextException displayException :: RTextException -> String | |
Generic RTextException Source # | |
Defined in Text.URI.Types Associated Types type Rep RTextException :: Type -> Type | |
Show RTextException Source # | |
Defined in Text.URI.Types Methods showsPrec :: Int -> RTextException -> ShowS show :: RTextException -> String showList :: [RTextException] -> ShowS | |
Eq RTextException Source # | |
Defined in Text.URI.Types Methods (==) :: RTextException -> RTextException -> Bool (/=) :: RTextException -> RTextException -> Bool | |
Ord RTextException Source # | |
Defined in Text.URI.Types Methods compare :: RTextException -> RTextException -> Ordering (<) :: RTextException -> RTextException -> Bool (<=) :: RTextException -> RTextException -> Bool (>) :: RTextException -> RTextException -> Bool (>=) :: RTextException -> RTextException -> Bool max :: RTextException -> RTextException -> RTextException min :: RTextException -> RTextException -> RTextException | |
type Rep RTextException Source # | |
Defined in Text.URI.Types type Rep RTextException = D1 ('MetaData "RTextException" "Text.URI.Types" "modern-uri-0.3.6.0-6vou5yoHQVY7WbNjeoUTle" 'False) (C1 ('MetaCons "RTextException" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 RTextLabel) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text))) |
Parsing
The input you feed into the parsers must be a valid URI as per RFC 3986, that is, its components should be percent-encoded where necessary.
parser :: MonadParsec e Text m => m URI Source #
This parser can be used to parse URI
from strict Text
. Remember to
use a concrete non-polymorphic parser type for efficiency.
parserBs :: MonadParsec e ByteString m => m URI Source #
This parser can be used to parse URI
from strict ByteString
.
Remember to use a concrete non-polymorphic parser type for efficiency.
Since: 0.0.2.0
Rendering
Rendering functions take care of constructing correct URI
representation as per RFC 3986, that is, percent-encoding will be applied
when necessary automatically.
renderStr' :: URI -> ShowS Source #
Render a given URI
value as ShowS
.
Since: 0.0.2.0