Tools to build SOAP clients using xml-conduit.

A mildly-complicated example:

import Network.SOAP import Network.SOAP.Transport.HTTP import Text.XML.Writer import Text.XML.Stream.Parse as Parse import Data.Text (Text) import qualified Data.Text as T main :: IO () main = do -- Initial one-time preparations. transport <- initTransport "http://example.com/soap/endpoint" id (iconv "cp-1251") -- Making queries activeStaff <- listStaff transport True print activeStaff data Person = Person Text Int deriving Show listStaff :: Transport -> Bool -> IO [Person] listStaff t active = invokeWS t "urn:dummy:listStaff" () body parser where body = element "request" $ element "listStaff" $ do element "active" active element "order" $ T.pack "age" element "limit" (10 :: Int) parser = StreamParser $ force "no people" $ tagNoAttr "people" $ Parse.many parsePerson parsePerson = tagName "person" (requireAttr "age") $ \age -> do name <- Parse.content return $ Person name (read . T.unpack $ age)

Notice: to invoke HTTPS services you need to initialize a transport from soap-tls or soap-openssl.

Full examples available at source repo: https://bitbucket.org/dpwiz/haskell-soap/src/HEAD/soap/examples/