úÎ=ø:.     "(C) 2015, The University of Kansas BSD-style (see the file LICENSE) Justin DawsonAlphaGHCNone!"(*+357>CIKLNinternal. Used for responses.!internal. Used for error message.f follows the JSON-RPC spec: either a list of values, or an (unordered) list of named fields, or none.JSession is a handle used for where to send a sequence of monadic commands.£The server-side recieived API. The user provides a way of dispatching this, to implement a server. An example of this using scotty is found in remote-json-server¥The client-side send function API. The user provides a way of dispatching this, to implement a client. An example of this using wreq is found in remote-json-clientFor E, a JSON Value is send, and a JSON Value is received back as a reply.For  :, a JSON Value is send, and the reply, if any, is ignored. The JSON RPC remote monadInternal map of repliesInternal type of our tags KThis is the non-GADT, JSON-serializable version of Notification and Method.!The basic procedure type"The basic command type#"The non-GADT version of MethodCall$žparseReply parses the reply JSON Value into Map of IDTag to specific result from remote method call. This function supports both singleton and batch results%NparseMethodResult looks up a result in the finite map created from the result.+&'()*+ , -.!/"0#$%123456789:;&'(+ , -.!/"0#$%&'()*+ , -.!/"0#$%123456789:;"(C) 2015, The University of Kansas BSD-style (see the file LICENSE) Justin DawsonAlphaGHCNone !"+7>IKLNU  ˜ is a user-visable deep embedding of a method or notification call. Server's provide transformations on this to implement remote-side call dispatching.Á"The Server MAY process a batch rpc call as a set of concurrent tasks, processing them in any order and with any width of parallelism." We control this using the first argument. § connects the ability to recieve a message with the ability to send a message. Typically this is done using TCP/IP and HTTP, but we can simulate the connection here.XFor use when parsing to a JSON value fails inside a server, before calling the router\Throw this exception when a 'JSONCall a -> IO a' fails to match a method or notification.RThrow this for when a 'JSONCall a -> IO a' method matches, but has invalid params.<=>? @ABCD     <=>?  @ABCD"(C) 2015, The University of Kansas BSD-style (see the file LICENSE) Justin DawsonAlphaGHCNone !"+7>IKLNU?A tracing natural transformation morphism over the Session API.?A tracing natural transformation morphism over the Receive API.<A tracing natural transformation morphism over the Call API."(C) 2015, The University of Kansas BSD-style (see the file LICENSE) Justin DawsonAlphaGHCNone!"(+7>DIKLNeSets up a JSON-RPC method call with the function name and arguments ISets up a JSON-RPC notification call with the function name and arguments€Takes a function that handles the sending of Async and Sync messages, and sends each Notification and Method one at a time ŠTakes a function that handles the sending of Async and Sync messages, and bundles Notifications together terminated by an optional MethodœTakes a function that handles the sending of Async and Sync messages, and bundles together Notifications and Procedures that are used in Applicative calls=Send RPC Notifications and Methods by using the given session EFGHI    EFGHIJ      !"#$%&'()*!+",, -.&'/0123456789::;;<=>?@ABCDEFremote-json-0.2Control.Remote.Monad.JSON Control.Remote.Monad.JSON.RouterControl.Remote.Monad.JSON.TraceControl.Remote.Monad.JSON.TypesArgsListNamedNoneSession ReceiveAPIReceiveSendAPISyncAsyncRPCCall CallMethodCallNotificationrouter transport parseErrormethodNotFound invalidParams traceSendAPItraceReceiveAPI traceCallAPImethod notification weakSession strongSessionapplicativeSessionsendResponse ErrorMessageRepliesIDTagJSONCallMethod Notification mkMethodCall parseReplyparseMethodResult ErrorResponseTagNotificationCall MethodCall$fFromJSONResponse$fToJSONResponse$fFromJSONErrorMessage$fToJSONErrorMessage $fFromJSONTag$fFromJSONArgs $fToJSONArgs $fShowArgs$fFromJSONJSONCall$fToJSONJSONCall$fShowJSONCall InvalidParamsMethodNotFound simpleRouter errorResponseinvalidRequest$fExceptionInvalidParams$fExceptionMethodNotFound runWeakRPC runStrongRPCsendBatchAsync sendBatchSyncrunApplicativeRPC