-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Happstack backend for jmacro-rpc -- -- Provides functions for serving jmacro-rpc json rpcs from Happstack. @package jmacro-rpc-happstack @version 0.1 -- | Happstack backend for JMacro-RPC. -- -- Example usage: -- --
--   
--   module Main where
--   import Network.JMacroRPC.Happstack
--   import Happstack.Server
--   import Language.Javascript.JMacro
--   import Control.Concurrent
--   import Network.JMacroRPC.Base
--   import Text.XHtml hiding(dir)
--   
--   jsScript f = script (primHtml f) ! [thetype "text/javascript"]
--   jsScript' = jsScript . show . renderJs
--   
--   testPage :: IO (ServerPartT IO Response)
--   testPage = mkConversationPageNoCulling pageFun (newMVar (1::Int)) jRpcs
--       where pageFun js = return $ toResponse $ 
--                          (header << [script ! [src "https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"] << noHtml]) +++
--                          jsScript' js +++
--                          jsScript' ([jmacro|$(\ 
--                                        {  
--                                              var b = $("<button>click me!</button>");
--                                              $("body").append(b);
--                                              b.click(\ {
--                                                  var c = getCounter();
--                                                  alert ("counter is: " + c);
--                                              });
--                                        });
--                                     |]);
--             jRpcs = [getCounterRPC]
--             getCounterRPC = 
--                 toJsonConvRPC "getCounter" $ \s -> retRight =<< modifyMVar s (\i -> return (i+1,i))
--   
--   retRight :: a -> IO (Either String a)
--   retRight = return . Right
--   
--   main = simpleHTTP nullConf =<< testPage
--   
-- -- Every invocation of this page (including from the same browser) will -- have a distinct, stateful, counter, stored server-side. module Network.JMacroRPC.Happstack serveRpcs :: (MonadIO m, Functor m, Monad m) => (Int -> m s) -> [JsonRPC m s] -> ServerPartT m Response serveSimpleRpcs :: (MonadIO m, Functor m, Monad m) => [JsonRPC m ()] -> ServerPartT m Response -- | This general handler allows explicit culling of conversation state. mkConversationPage :: (Monad m, Functor m, MonadIO m) => IO timestamp -> (IntMap (timestamp, s) -> IO (IntMap (timestamp, s))) -> (JStat -> ServerPartT m Response) -> IO s -> [JsonRPC m s] -> IO (ServerPartT m Response) -- | This simple handler allows conversation state to grow without bounds. mkConversationPageNoCulling :: (Monad m, Functor m, MonadIO m) => (JStat -> ServerPartT m Response) -> IO s -> [JsonRPC m s] -> IO (ServerPartT m Response)