module Network.XmlRpc.Introspect where

import Network.XmlRpc.Internals
import Network.XmlRpc.Client

type Signature = ([Type],Type)
type Help = String
type MethodInfo = (String,[Signature],Help)

-- Primitive introspection functions

listMethods :: String -> IO [String]
listMethods url = remote url "system.listMethods"

methodSignature :: String -> String -> IO [[String]]
methodSignature url = remote url "system.methodSignature"

methodHelp :: String -> String -> IO String
methodHelp url = remote url "system.methodHelp"


signatures :: String -> String -> IO [Signature]
signatures url name = do
		      sigs <- methodSignature url name
		      return [ (map read as,read r) | (r:as) <- sigs ]

methodInfo :: String -> String -> IO MethodInfo
methodInfo url name = do
		      sigs <- signatures url name
		      help <- methodHelp url name
		      return (name, sigs, help)