BSD-3-Clause licensed by Athan Clark
Maintained by [email protected]
This version can be pinned in stack with:urlpath-9.0.0@sha256:341c9b91e6ac7054fe85a90f065223f03edb8a5f1370923b4f614a54b86b8306,1348

Module documentation for 9.0.0


Build Status Coverage Status Chat Room MIT License Hackage Waffle Issues

Dirt-simple, embarrassing, horribly unimaginative URL combinator library for Haskell.


λ> cabal install urlpath


You can use the combinators purely, if you’re into that:

λ> expandRelative $ "foo.php" <?> ("key1","bar") <&> ("key2","baz")

↪ "foo.asp?key1=bar&key2=baz"

Or you can use them with a configurable root, via the Reader monad:

λ> runReader
     (runAbsoluteUrl $ url $ "foo.asp" <?> ("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 - RelativeUrlT, GroundedUrlT, and AbsoluteUrlT), which we can⋅ integrate in different libraries, like Lucid:

λ> (runAbsoluteUrl $ renderTextT $ do
     foo <- lift $ url $ "foo" <?> ("bar","baz")
     script_ [src_ foo] "" )
   ) ""

↪ "<script src=\"\"></script>"

and, in Scotty:

main :: IO ()
main = scottyT 3000

    rootConf = flip runAbsoluteT ""

    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/
↪ ""

How to run tests

λ> cabal install hspec --enable-tests && cabal test --show-details=always


I would prefer it that any inquiries and questions go to the Gitter Chat room, while any suggestions, complaints, or requests go in the GitHub Issues / Waffle Dashboard. All ideas are welcome! (Except really gross ones. I’ve got limits.)