The network-uri package
This package provides facilities for parsing and unparsing URIs, and creating and resolving relative URI references, closely following the URI spec, IETF RFC 3986 .
The main module in this package,
Network.URI, was split off from the
network package in the network-2.6 release.
Network.URI.Static that allows you to declare static URIs in type-safe manner.
With the base module, when you declare a static URI, you need to either use
Maybe URI or use
URI and give up type safety.
safeButWrappedInMaybeURI :: Maybe URI safeButWrappedInMaybeURI = parseURI "http://www.google.com/" directButUnsafeURI :: URI directButUnsafeURI = fromJust $ parseURI "http://www.google.com/"
This library allows you to write static URIs in type-safe manner by checking URIs at compile time using template haskell.
Now, you can write the following.
directAndSafeURI :: URI directAndSafeURI = $$(staticURI "http://www.google.com")
You can even use a quasi quote if you’d like.
directAndSafeURI :: URI directAndSafeURI = [uri|"http://www.google.com"|]
These two expressions emit an error at compile time if a specified URI is malformed.
- Add official support for SafeHaskell NOTE: This is the first version whose SafeHaskell properties have become an intentional part of the API contract; previous versions were merely accidentally safe-inferred (or not depending on various factors; in other words, this was a fragile property).
DeriveLiftextension, when available.
- Mark the modules as Safe for SafeHaskell.
- Merge network-uri-static (Network.URI.Static) into this package, which offers a way to parse URI strings at compile time.
Lenses for the
Genericinstances for the
Liftinstances for the
isReservedand related character-class functions.
- Start to add some benchmarks for performance analysis
- Fix a bug: Correctly parse IPv6 addresses in URIs.
rectifywhich normalizes a URI if it is missing certain separator characters required by the module. Some users found adding those characters inconvenient when building a URI from parts.
- Fix a bug with IPv4 address parsing.
- Implement Generic and NFData.
- Initial release: Module split off from