jmacro-0.3.2: QuasiQuotation library for programmatic generation of Javascript code.




Allows for the creation of rpc server/client pairs from monomorphic functions. The server portion is a function from a json-encoded list of parameters to a json response. A list of server functions are expected to be wrapped by a dispatch function in the server framework of your choice.

The client portion generated from a function of arity n is a function from a string identifying a server or a subdirectory on a server to an arity n function from javascript expressions (of type JExpr) to a single javascript expression. This expression, when evaluated on the client side, will call back to the provided server with json-serialized arguments and yield the result (deserialized from json). This client function is expected to be embedded via antiquotation into a larger block of jmacro code.

Client portions must unfortunately be given explicit type signatures.

The following example is a server/client pair providing an ajax call to add integers.

 testRPCCall :: String -> JExpr -> JExpr -> JExpr
 (testRPC, testRPCCall) = mkWebRPC "test" $ \x y -> asIO $ return (x + (y::Int))



mkWebRPC :: (ToWebRPC_ a, CallWebRPC_ a b) => String -> a -> (WebRPCDesc, String -> b)Source

Produce a pair of (ServerFunction, ClientFunction) from a function in IO

asIO :: IO a -> IO aSource

id with a helpful type.

type Request = StringSource

A String containing a json representation of function arguments encoded as a list of parameters. Generally would be passed as part of an HTTP request.

data Response Source

Either a success or failure (with code). Generally would be turned back into a propre HTTP response.