urlpath: Painfully simple URL writing combinators
Simple URL DSL for Haskell.
This library tries to make it easier for people to write Url strings, structurally. Packages like Yesod Routes do a wonderful job at implementing string-free routing and references, but sometimes we have to compromise. This tries to make that compromise less painful.
Use bare combinators to render your strings (kinda useless):
expandRelative $ "foo.php" <?> ("key1","bar") <&> ("key2","baz") ↪ "foo.php?key1=bar&key2=baz"
... or use the MonadReader instance for a configurable host:
let path = runAbsoluteUrl $ url $ "foo.php" <?> ("key1","bar") <&> ("key2","baz") path "example.com" ↪ "example.com/foo.php?key1=bar&key2=baz"
url
puts the UrlString
in a MonadReader that we can use for applying our
host. We use different monads for different deployment schemes (currently we
have 3 - RelativeUrl
, GroundedUrl
, and AbsoluteUrl
), which we can
integrate in different libraries, like Lucid:
(runAbsoluteUrl $ renderTextT $ do foo <- lift $ url $ "foo" <?> ("bar","baz") script_ [src_ foo] "" ) ) "example.com" ↪ "<script src=\"example.com/foo?bar=baz\"></script>"
... and in Scotty ...
main :: IO () main = scottyT 3000 rootConf rootConf run where rootConf = flip runAbsoluteT "http://example.com" run :: ( MonadIO m , MonadReader T.Text m , Url T.Text m ) => ScottyT LT.Text m () run = get "/" $ do path <- lift $ url $ "foo" <?> ("bar","baz") text $ LT.fromStrict path λ> curl localhost:3000/ ↪ "http://example.com/foo?bar=baz"
Note that in the scotty example, we don't use one of our deployment schemes -
this is because the scottyT
function expects it's underlying monad to be an
instance of MonadIO
, which we can only instantiate in our monad transformers.
Please take mind - the string type underlying the Url rendering is generalized
to Data.String.IsString
for convenient use with -XOverloadedStrings
. However,
due to that generality, we need to specify the monomorphic type (like
Data.Text.Text
above).
Downloads
- urlpath-0.2.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
Versions [RSS] | 0.0.1, 0.0.2, 0.0.3, 0.0.4, 0.0.5, 0.0.6, 0.1, 0.1.0.1, 0.2, 1.0.0, 1.1.0, 2.0.0, 2.1.0, 3.0.0, 3.1.0, 3.1.1, 3.2.0, 3.2.1, 3.2.1.1, 3.3.0, 4.0.0, 4.0.0.1, 4.1.0, 4.2.0, 5.0.0, 5.0.0.1, 6.0.0, 6.0.1, 6.0.2, 6.0.3, 6.0.4, 7.0.0, 7.0.1, 7.0.2, 7.1.0, 8.0.0, 8.0.1, 8.1.0, 8.2.0, 9.0.0, 9.0.0.1, 9.0.1, 10.0.0, 11.0.0, 11.0.1, 11.0.2 (info) |
---|---|
Dependencies | base (>=4 && <5), mtl, transformers [details] |
License | MIT |
Author | Athan Clark <athan.clark@gmail.com> |
Maintainer | Athan Clark <athan.clark@gmail.com> |
Category | Web |
Source repo | head: git clone https://github.com/athanclark/urlpath.git |
Uploaded | by athanclark at 2014-12-22T15:16:12Z |
Distributions | LTSHaskell:11.0.2, Stackage:11.0.2 |
Reverse Dependencies | 4 direct, 1 indirect [details] |
Downloads | 21377 total (205 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs uploaded by user Build status unknown [no reports yet] |