HaXR — the Haskell XML-RPC library
HaXR is a library for writing XML-RPC client and server applications in Haskell.
Christopher Milton came up with the HaXR name, thanks!
Example are available in the examples/ folder in the darcs repository. Here we talk about a couple of them.
This is a simple CGI-based server with only one method that takes two integers and returns their sum.
import Network.XmlRpc.Server add :: Int -> Int -> IO Int add x y = return (x + y) main = cgiXmlRpcServer [("examples.add", fun add)]
Note: the argument to fun can be a function that takes any number of arguments.
This is a client that calls the method implemented by the server above and prints the result.
import Network.XmlRpc.Client server = "http://localhost/~bjorn/cgi-bin/simple_server" add :: String -> Int -> Int -> IO Int add url = remote url "examples.add" main = do let x = 4 y = 7 z <- add server x y putStrLn (show x ++ " + " ++ show y ++ " = " ++ show z)
Note: the function returned by remote can be a function that takes any number of arguments.
Have a look at examples/Person.hs for an example of how
to use heterogeneous structs.
does the same using the
This library supports XML-RPC introspection, both in the client and server. See examples/make-stubs.hs for an example of how to use introspection in a client.
Use the online copy of the API documentation.
I have written a report (ps, pdf) on the design and implementation of Haskell XML-RPC. The report was written in January 2004, and is slowly getting out of date.
You can get the latest versions of the haxr from Hackage.
There used to be a separate haxr-th, now everything is available in haxr.
Use darcs to get the source from the repo at http://code.haskell.org/haxr/:
$ darcs get http://code.haskell.org/haxr/
Reporting bugs, requesting features
To report bugs, request features, submit patches, or ask for help, email Brent Yorgey.
Some known problems are listed in the TODO file in the source distribution. If you need any of those fixed, let me know.
HaXR is distributed under a BSD-style license.
Copyright 2003-2007 Björn Bringert. Copyright 2009-2010 Gracjan Polak. Copyright 2012 Brent Yorgey.