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> |
| Uploaded | by athanclark at 2014-12-22T15:16:12Z |
| Category | Web |
| Source repo | head: git clone https://github.com/athanclark/urlpath.git |
| Distributions | LTSHaskell:11.0.2, NixOS:11.0.2, Stackage:11.0.2 |
| Reverse Dependencies | 4 direct, 1 indirect [details] |
| Downloads | 22514 total (192 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] |