urlpath
 
 
 
 
 

Dirt-simple, embarrassing, horribly unimaginative URL combinator library for
Haskell.
Installation
λ> cabal install urlpath
Usage
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"))
     "http://example.com"
↪ "http://example.com/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] "" )
   ) "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"
How to run tests
λ> cabal install hspec --enable-tests && cabal test --show-details=always
Contributing
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.)