This is a thin persistent FFI layer for using jsUri with Fay.
See the source code for comments on the implementation, names are kept similar to what jsUri uses. Hopefully it's easy to understand even if you haven't used jsUri before. The argument order is changed to be more haskelly, such as always putting the Uri as the last argument and not combining setting and removal functions. Any other changes are documented in the source.
Since jsUri is a small library fay-uri also serves as a good example on how to write FFI bindings in Fay.
To use this with fay, cabal install the package which will put the source files in fay ~/.cabal/share/fay-uri-0.1.0.0/src. You can then compile with fay using
in fay >= 0.12:
fay --package fay-uri MyFile.hs
in fay < 0.12:
fay --include ~/.cabal/share/fay-uri-0.1.0.0/src MyFile.hs
import Language.Fay.Prelude
import Language.Fay.Uri
main :: Fay ()
main = putStrLn . toString . removePath . withProtocol "https" . newUri =<< currentUri