Copyright | (c) Athan L. Clark |
---|---|
License | MIT |
Maintainer | Athan L. Clark <[email protected]> |
Stability | experimental |
Portability | GHC |
Safe Haskell | None |
Language | Haskell2010 |
Data.Url
Description
This library helps us distinguish how we present URLs - we might show them
relatively, absolutely (with the URI authority - scheme, port, hostname, etc.),
or grounded - where the path begins with /
.
We leverage Chris Done's path library to distinguish relative vs. grounded paths at compile time, and provide some additional features like a file extension and query parameters in path-extra.
Synopsis
- class MonadUrl base (m :: Type -> Type) | m -> base where
- data URL
- printURL :: URL -> Text
- newtype RelativeUrlT (m :: Type -> Type) a = RelativeUrlT {
- runRelativeUrlT :: m a
- type RelativeUrl = RelativeUrlT Identity
- newtype GroundedUrlT (m :: Type -> Type) a = GroundedUrlT {
- runGroundedUrlT :: m a
- type GroundedUrl = GroundedUrlT Identity
- newtype AbsoluteUrlT (m :: Type -> Type) a = AbsoluteUrlT {
- runAbsoluteUrlT :: (Location Abs -> URI) -> m a
- type AbsoluteUrl = AbsoluteUrlT Identity
- mkUriLocEmpty :: Location Abs -> URI
- getPathChunks :: Path base type' -> Vector Text
- packLocation :: Maybe Text -> Bool -> URIAuth -> Location Abs -> URI
- unpackLocation :: URI -> (Maybe Text, Bool, URIAuth, Location Abs)
Classes
class MonadUrl base (m :: Type -> Type) | m -> base where Source #
Turns a Path
or Location
into a String
, where the rendering behavior
(relative, grounded and absolute) is encoded in the monad you use, much like
LoggingT
and NoLoggingT
from monad-logger.
Methods
Instances
MonadUrl Rel IO Source # | Treated as relative urls |
Applicative m => MonadUrl Abs (AbsoluteUrlT m) Source # | |
Applicative m => MonadUrl Abs (GroundedUrlT m) Source # | |
Applicative m => MonadUrl Rel (RelativeUrlT m) Source # | |
(MonadUrl base m, Monad m) => MonadUrl base (LoggingT m) Source # | |
(MonadUrl base m, Monad m) => MonadUrl base (NoLoggingT m) Source # | |
(MonadUrl base m, Monad m) => MonadUrl base (ResourceT m) Source # | |
(MonadUrl base m, Monad m) => MonadUrl base (MaybeT m) Source # | |
(MonadUrl base m, Monad m) => MonadUrl base (ExceptT e m) Source # | |
(MonadUrl base m, Monad m) => MonadUrl base (IdentityT m) Source # | |
(MonadUrl base m, Monad m) => MonadUrl base (ReaderT r m) Source # | |
(MonadUrl base m, Monad m) => MonadUrl base (StateT s m) Source # | |
(MonadUrl base m, Monad m, Monoid w) => MonadUrl base (WriterT w m) Source # | |
(MonadUrl base m, Monad m) => MonadUrl base (ContT r m) Source # | |
(MonadUrl base m, Monad m, Monoid w) => MonadUrl base (RWST r w s m) Source # | |
Types
URL
Either a URI (which could include a hostname), or a relative url.
Relative Urls
newtype RelativeUrlT (m :: Type -> Type) a Source #
When printing a URL
generated by a Location
in this context,
they will always omit the hostname information and print path references relatively
(without ./
).
Constructors
RelativeUrlT | |
Fields
|
Instances
type RelativeUrl = RelativeUrlT Identity Source #
Grounded Urls
newtype GroundedUrlT (m :: Type -> Type) a Source #
Grounded urls mean that, while omiting host information, paths start with
a /
, like /foo
.
Constructors
GroundedUrlT | |
Fields
|
Instances
MMonad GroundedUrlT Source # | |||||
Defined in Data.Url Methods embed :: forall (n :: Type -> Type) m b. Monad n => (forall a. m a -> GroundedUrlT n a) -> GroundedUrlT m b -> GroundedUrlT n b # | |||||
MonadTransControl GroundedUrlT Source # | |||||
Defined in Data.Url Associated Types
Methods liftWith :: Monad m => (Run GroundedUrlT -> m a) -> GroundedUrlT m a # restoreT :: Monad m => m (StT GroundedUrlT a) -> GroundedUrlT m a # | |||||
MonadTrans GroundedUrlT Source # | |||||
Defined in Data.Url Methods lift :: Monad m => m a -> GroundedUrlT m a # | |||||
MFunctor GroundedUrlT Source # | |||||
Defined in Data.Url Methods hoist :: Monad m => (forall a. m a -> n a) -> GroundedUrlT m b -> GroundedUrlT n b # | |||||
MonadTransControl GroundedUrlT Identity Source # | |||||
Defined in Data.Url Methods liftWith :: Monad m => (Run GroundedUrlT Identity -> m a) -> GroundedUrlT m a # restoreT :: Monad m => m (Identity a) -> GroundedUrlT m a # | |||||
(MonadReader r m, MonadWriter w m, MonadState s m) => MonadRWS r w s (GroundedUrlT m) Source # | |||||
Defined in Data.Url | |||||
MonadBaseControl b m => MonadBaseControl b (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods liftBaseWith :: (RunInBase (GroundedUrlT m) b -> b a) -> GroundedUrlT m a # restoreM :: StM (GroundedUrlT m) a -> GroundedUrlT m a # | |||||
MonadError e m => MonadError e (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods throwError :: e -> GroundedUrlT m a # catchError :: GroundedUrlT m a -> (e -> GroundedUrlT m a) -> GroundedUrlT m a # | |||||
MonadReader r m => MonadReader r (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods ask :: GroundedUrlT m r # local :: (r -> r) -> GroundedUrlT m a -> GroundedUrlT m a # reader :: (r -> a) -> GroundedUrlT m a # | |||||
MonadState s m => MonadState s (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods get :: GroundedUrlT m s # put :: s -> GroundedUrlT m () # state :: (s -> (a, s)) -> GroundedUrlT m a # | |||||
MonadWriter w m => MonadWriter w (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods writer :: (a, w) -> GroundedUrlT m a # tell :: w -> GroundedUrlT m () # listen :: GroundedUrlT m a -> GroundedUrlT m (a, w) # pass :: GroundedUrlT m (a, w -> w) -> GroundedUrlT m a # | |||||
MonadBase b m => MonadBase b (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods liftBase :: b α -> GroundedUrlT m α # | |||||
Applicative m => MonadUrl Abs (GroundedUrlT m) Source # | |||||
MonadBaseControl b m stM => MonadBaseControl b (GroundedUrlT m) (Compose stM Identity) Source # | |||||
Defined in Data.Url Methods liftBaseWith :: (RunInBase (GroundedUrlT m) b (Compose stM Identity) -> b a) -> GroundedUrlT m a # restoreM :: Compose stM Identity a -> GroundedUrlT m a # | |||||
MonadFix m => MonadFix (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods mfix :: (a -> GroundedUrlT m a) -> GroundedUrlT m a # | |||||
MonadIO m => MonadIO (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods liftIO :: IO a -> GroundedUrlT m a # | |||||
Alternative m => Alternative (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods empty :: GroundedUrlT m a # (<|>) :: GroundedUrlT m a -> GroundedUrlT m a -> GroundedUrlT m a # some :: GroundedUrlT m a -> GroundedUrlT m [a] # many :: GroundedUrlT m a -> GroundedUrlT m [a] # | |||||
Applicative m => Applicative (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods pure :: a -> GroundedUrlT m a # (<*>) :: GroundedUrlT m (a -> b) -> GroundedUrlT m a -> GroundedUrlT m b # liftA2 :: (a -> b -> c) -> GroundedUrlT m a -> GroundedUrlT m b -> GroundedUrlT m c # (*>) :: GroundedUrlT m a -> GroundedUrlT m b -> GroundedUrlT m b # (<*) :: GroundedUrlT m a -> GroundedUrlT m b -> GroundedUrlT m a # | |||||
Functor m => Functor (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods fmap :: (a -> b) -> GroundedUrlT m a -> GroundedUrlT m b # (<$) :: a -> GroundedUrlT m b -> GroundedUrlT m a # | |||||
Monad m => Monad (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods (>>=) :: GroundedUrlT m a -> (a -> GroundedUrlT m b) -> GroundedUrlT m b # (>>) :: GroundedUrlT m a -> GroundedUrlT m b -> GroundedUrlT m b # return :: a -> GroundedUrlT m a # | |||||
MonadPlus m => MonadPlus (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods mzero :: GroundedUrlT m a # mplus :: GroundedUrlT m a -> GroundedUrlT m a -> GroundedUrlT m a # | |||||
MonadCatch m => MonadCatch (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods catch :: (HasCallStack, Exception e) => GroundedUrlT m a -> (e -> GroundedUrlT m a) -> GroundedUrlT m a # | |||||
MonadMask m => MonadMask (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods mask :: HasCallStack => ((forall a. GroundedUrlT m a -> GroundedUrlT m a) -> GroundedUrlT m b) -> GroundedUrlT m b # uninterruptibleMask :: HasCallStack => ((forall a. GroundedUrlT m a -> GroundedUrlT m a) -> GroundedUrlT m b) -> GroundedUrlT m b # generalBracket :: HasCallStack => GroundedUrlT m a -> (a -> ExitCase b -> GroundedUrlT m c) -> (a -> GroundedUrlT m b) -> GroundedUrlT m (b, c) # | |||||
MonadThrow m => MonadThrow (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods throwM :: (HasCallStack, Exception e) => e -> GroundedUrlT m a # | |||||
MonadLogger m => MonadLogger (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> GroundedUrlT m () # | |||||
MonadCont m => MonadCont (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods callCC :: ((a -> GroundedUrlT m b) -> GroundedUrlT m a) -> GroundedUrlT m a # | |||||
(MonadResource m, MonadBase IO m) => MonadResource (GroundedUrlT m) Source # | |||||
Defined in Data.Url Methods liftResourceT :: ResourceT IO a -> GroundedUrlT m a # | |||||
Show (m a) => Show (GroundedUrlT m a) Source # | |||||
Defined in Data.Url Methods showsPrec :: Int -> GroundedUrlT m a -> ShowS # show :: GroundedUrlT m a -> String # showList :: [GroundedUrlT m a] -> ShowS # | |||||
Eq (m a) => Eq (GroundedUrlT m a) Source # | |||||
Defined in Data.Url Methods (==) :: GroundedUrlT m a -> GroundedUrlT m a -> Bool # (/=) :: GroundedUrlT m a -> GroundedUrlT m a -> Bool # | |||||
Ord (m a) => Ord (GroundedUrlT m a) Source # | |||||
Defined in Data.Url Methods compare :: GroundedUrlT m a -> GroundedUrlT m a -> Ordering # (<) :: GroundedUrlT m a -> GroundedUrlT m a -> Bool # (<=) :: GroundedUrlT m a -> GroundedUrlT m a -> Bool # (>) :: GroundedUrlT m a -> GroundedUrlT m a -> Bool # (>=) :: GroundedUrlT m a -> GroundedUrlT m a -> Bool # max :: GroundedUrlT m a -> GroundedUrlT m a -> GroundedUrlT m a # min :: GroundedUrlT m a -> GroundedUrlT m a -> GroundedUrlT m a # | |||||
type StT GroundedUrlT a Source # | |||||
Defined in Data.Url | |||||
type StM (GroundedUrlT m) a Source # | |||||
Defined in Data.Url |
type GroundedUrl = GroundedUrlT Identity Source #
Absolute Urls
newtype AbsoluteUrlT (m :: Type -> Type) a Source #
Given a means to take an absolute location and turn it into an URI, make a monad used to
construct urls. You can use packLocation
to create the Location Abs -> URI
function.
Constructors
AbsoluteUrlT | |
Fields
|
Instances
MMonad AbsoluteUrlT Source # | |||||
Defined in Data.Url Methods embed :: forall (n :: Type -> Type) m b. Monad n => (forall a. m a -> AbsoluteUrlT n a) -> AbsoluteUrlT m b -> AbsoluteUrlT n b # | |||||
MonadTransControl AbsoluteUrlT Source # | |||||
Defined in Data.Url Associated Types
Methods liftWith :: Monad m => (Run AbsoluteUrlT -> m a) -> AbsoluteUrlT m a # restoreT :: Monad m => m (StT AbsoluteUrlT a) -> AbsoluteUrlT m a # | |||||
MonadTrans AbsoluteUrlT Source # | |||||
Defined in Data.Url Methods lift :: Monad m => m a -> AbsoluteUrlT m a # | |||||
MFunctor AbsoluteUrlT Source # | |||||
Defined in Data.Url Methods hoist :: Monad m => (forall a. m a -> n a) -> AbsoluteUrlT m b -> AbsoluteUrlT n b # | |||||
MonadTransControl AbsoluteUrlT Identity Source # | |||||
Defined in Data.Url Methods liftWith :: Monad m => (Run AbsoluteUrlT Identity -> m a) -> AbsoluteUrlT m a # restoreT :: Monad m => m (Identity a) -> AbsoluteUrlT m a # | |||||
MonadRWS r w s m => MonadRWS r w s (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url | |||||
MonadBaseControl b m => MonadBaseControl b (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods liftBaseWith :: (RunInBase (AbsoluteUrlT m) b -> b a) -> AbsoluteUrlT m a # restoreM :: StM (AbsoluteUrlT m) a -> AbsoluteUrlT m a # | |||||
MonadError e m => MonadError e (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods throwError :: e -> AbsoluteUrlT m a # catchError :: AbsoluteUrlT m a -> (e -> AbsoluteUrlT m a) -> AbsoluteUrlT m a # | |||||
MonadReader r m => MonadReader r (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods ask :: AbsoluteUrlT m r # local :: (r -> r) -> AbsoluteUrlT m a -> AbsoluteUrlT m a # reader :: (r -> a) -> AbsoluteUrlT m a # | |||||
MonadState s m => MonadState s (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods get :: AbsoluteUrlT m s # put :: s -> AbsoluteUrlT m () # state :: (s -> (a, s)) -> AbsoluteUrlT m a # | |||||
MonadWriter w m => MonadWriter w (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods writer :: (a, w) -> AbsoluteUrlT m a # tell :: w -> AbsoluteUrlT m () # listen :: AbsoluteUrlT m a -> AbsoluteUrlT m (a, w) # pass :: AbsoluteUrlT m (a, w -> w) -> AbsoluteUrlT m a # | |||||
MonadBase b m => MonadBase b (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods liftBase :: b α -> AbsoluteUrlT m α # | |||||
Applicative m => MonadUrl Abs (AbsoluteUrlT m) Source # | |||||
MonadBaseControl b m stM => MonadBaseControl b (AbsoluteUrlT m) (Compose stM Identity) Source # | |||||
Defined in Data.Url Methods liftBaseWith :: (RunInBase (AbsoluteUrlT m) b (Compose stM Identity) -> b a) -> AbsoluteUrlT m a # restoreM :: Compose stM Identity a -> AbsoluteUrlT m a # | |||||
MonadIO m => MonadIO (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods liftIO :: IO a -> AbsoluteUrlT m a # | |||||
Alternative m => Alternative (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods empty :: AbsoluteUrlT m a # (<|>) :: AbsoluteUrlT m a -> AbsoluteUrlT m a -> AbsoluteUrlT m a # some :: AbsoluteUrlT m a -> AbsoluteUrlT m [a] # many :: AbsoluteUrlT m a -> AbsoluteUrlT m [a] # | |||||
Applicative m => Applicative (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods pure :: a -> AbsoluteUrlT m a # (<*>) :: AbsoluteUrlT m (a -> b) -> AbsoluteUrlT m a -> AbsoluteUrlT m b # liftA2 :: (a -> b -> c) -> AbsoluteUrlT m a -> AbsoluteUrlT m b -> AbsoluteUrlT m c # (*>) :: AbsoluteUrlT m a -> AbsoluteUrlT m b -> AbsoluteUrlT m b # (<*) :: AbsoluteUrlT m a -> AbsoluteUrlT m b -> AbsoluteUrlT m a # | |||||
Functor m => Functor (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods fmap :: (a -> b) -> AbsoluteUrlT m a -> AbsoluteUrlT m b # (<$) :: a -> AbsoluteUrlT m b -> AbsoluteUrlT m a # | |||||
Monad m => Monad (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods (>>=) :: AbsoluteUrlT m a -> (a -> AbsoluteUrlT m b) -> AbsoluteUrlT m b # (>>) :: AbsoluteUrlT m a -> AbsoluteUrlT m b -> AbsoluteUrlT m b # return :: a -> AbsoluteUrlT m a # | |||||
MonadCatch m => MonadCatch (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods catch :: (HasCallStack, Exception e) => AbsoluteUrlT m a -> (e -> AbsoluteUrlT m a) -> AbsoluteUrlT m a # | |||||
MonadMask m => MonadMask (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods mask :: HasCallStack => ((forall a. AbsoluteUrlT m a -> AbsoluteUrlT m a) -> AbsoluteUrlT m b) -> AbsoluteUrlT m b # uninterruptibleMask :: HasCallStack => ((forall a. AbsoluteUrlT m a -> AbsoluteUrlT m a) -> AbsoluteUrlT m b) -> AbsoluteUrlT m b # generalBracket :: HasCallStack => AbsoluteUrlT m a -> (a -> ExitCase b -> AbsoluteUrlT m c) -> (a -> AbsoluteUrlT m b) -> AbsoluteUrlT m (b, c) # | |||||
MonadThrow m => MonadThrow (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods throwM :: (HasCallStack, Exception e) => e -> AbsoluteUrlT m a # | |||||
MonadLogger m => MonadLogger (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> AbsoluteUrlT m () # | |||||
MonadCont m => MonadCont (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods callCC :: ((a -> AbsoluteUrlT m b) -> AbsoluteUrlT m a) -> AbsoluteUrlT m a # | |||||
MonadResource m => MonadResource (AbsoluteUrlT m) Source # | |||||
Defined in Data.Url Methods liftResourceT :: ResourceT IO a -> AbsoluteUrlT m a # | |||||
type StT AbsoluteUrlT a Source # | |||||
Defined in Data.Url | |||||
type StM (AbsoluteUrlT m) a Source # | |||||
Defined in Data.Url |
type AbsoluteUrl = AbsoluteUrlT Identity Source #
getPathChunks :: Path base type' -> Vector Text Source #