úÎ*P'Ø*      !"#$%&'() Safe-Inferred !"-2346 IAbstract data type for a Url - a "target" and GET parameters. We require IsString and MonoidI for generic construction, but rendering will require a monomorphic type.;The type constructor is parameterized over it's underlying IsString & Monoid instance.We can't provide a Show instance for  UrlString& because that would force us to use String.Makes a  UrlString3 out of a raw target path and a GET parameter pair.%Adds another GET parameter pair to a  UrlString.HRender the Url String flatly - without anything prepended to the target.<Render the Url String as grounded - prepended with a "root" // character.<Render the Url String as absolute - getting the root from a  MonadReader context.HRender the Url String as absolute, but with your own configuration type. ÿ€data SiteConfig = SiteConfig { host :: T.Text , cdnHost :: T.Text } deriving (Show, Eq) foo :: HtmlT (Reader SiteConfig) () foo = do url <- lift $ expandAbsoluteWith ("foo.php" <?> ("bar","baz")) host script_ [src_ url] "" bar :: LT.Text bar = (runReader (runTextT foo)) $ SiteConfig "example.com" "cdn.example.com"$  Target string GET ParameterOld UrlAdditional GET Parameter !"# $  #"!     !"#  Safe-Inferred )2346=HKM$A  UrlReader is a ReaderT] monad transformer, that just has conventions associated with it to decide how to "deploy".VIn the sense I'm using here, "deployment" is really "how the hostname gets added to all urls>". Change the deployment scheme by coerciing the Monad Reader.'UrlD is a relationship between an underlying (monomorphic) string type plain, and a deployment context mb. We try to make the deployment style coercible at the top level - if the expression has a type )Url String (AbsoluteUrlT String Identity) or .Monad m => Url T.Text (GroundedUrlT LT.Text m) will force #all use-cases within the expression to coerce to that type. $%&MonadReader with index string and result b Reader index Final result'(+Url type, parameterized over a string type plainRendered Url in some context.)raw small string Rendered string in some context.*+,-./ $%&'()$%&'()$%&'()*+,-./0        !"#$%&'()*+,-./ urlpath-0.2 UrlPath.TypesUrlPath AbsoluteUrl AbsoluteUrlTrunAbsoluteUrlT GroundedUrl GroundedUrlTrunGroundedUrlT RelativeUrl RelativeUrlTrunRelativeUrlT UrlString showUrlString<&>expandRelativeexpandGroundedexpandAbsoluteexpandAbsoluteWith$fMonadIOAbsoluteUrlT$fMonadReaderhAbsoluteUrlT$fMonadTransAbsoluteUrlT$fMonadAbsoluteUrlT$fApplicativeAbsoluteUrlT$fMonadIOGroundedUrlT$fMonadReaderhGroundedUrlT$fMonadTransGroundedUrlT$fMonadGroundedUrlT$fApplicativeGroundedUrlT$fMonadIORelativeUrlT$fMonadReaderhRelativeUrlT$fMonadTransRelativeUrlT$fMonadRelativeUrlT$fApplicativeRelativeUrlT UrlReaderResult runUrlReaderUrlurlplainUrl$fUrlReaderplainAbsoluteUrlT$fUrlplainAbsoluteUrlT$fUrlReaderplainGroundedUrlT$fUrlplainGroundedUrlT$fUrlReaderplainRelativeUrlT$fUrlplainRelativeUrlT