HaXR is a library for writing XML-RPC client and server applications in Haskell.
HaXR consists of two packages: haxr and haxr-th. The latter package contains the Template Haskell code used for automatically deriving XML-RPC struct representations for Haskell records.
Christopher Milton came up with the HaXR name, thanks!
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.
haxr-th/examples/PersonTH.hs
does the same using the Network.XmlRpc.THDeriveXmlRpcType
module.
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.
More example are available in the examples/ folder in the darcs repository.
Use the online copy of the API documentation or build your own from the sources by using Haddock.
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 and haxr-th packages from Hackage.
Use darcs to get the source from the repo at http://darcs.haskell.org/haxr/:
$ darcs get http://darcs.haskell.org/haxr/
To report bugs, request features, submit patches, or ask for help, email bjorn@bringert.net.
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.