[Add XMLMetaData to the HSPT monad jeremy@n-heptane.com**20080605043717] { hunk ./src/HSP/Monad.hs 20 - HSP, HSPT, HSPT', + HSP, HSPT, HSPT', XMLMetaData(..), html4Strict, html4StrictFrag, hunk ./src/HSP/Monad.hs 24 - getParam, getIncNumber, doIO, catch + getParam, getIncNumber, doIO, catch, + setMetaData, withMetaData hunk ./src/HSP/Monad.hs 29 -import Control.Monad.Reader (ReaderT(..), ask, lift) +-- import Control.Monad.Reader (ReaderT(..), ask, lift) +import Control.Monad.RWS (RWST(..), ask, lift, put) +import Control.Monad.State hunk ./src/HSP/Monad.hs 42 +import HSP.XML +import HSP.HTML hunk ./src/HSP/Monad.hs 56 -type HSPT' m = ReaderT HSPEnv m +data XMLMetaData = XMLMetaData + { doctype :: (Bool, String) + , contentType :: String + , preferredRenderer :: XML -> String + } + +html4Strict :: Maybe XMLMetaData +html4Strict = Just $ + XMLMetaData { doctype = (True, "\n") + , contentType = "text/html" + , preferredRenderer = renderAsHTML + } + +html4StrictFrag :: Maybe XMLMetaData +html4StrictFrag = Just $ + XMLMetaData { doctype = (False, "\n") + , contentType = "text/html" + , preferredRenderer = renderAsHTML + } + +type HSPT' m = RWST HSPEnv () (Maybe XMLMetaData) m hunk ./src/HSP/Monad.hs 85 -runHSP :: HSP a -> HSPEnv -> IO a -runHSP = runReaderT . unXMLGenT +runHSP :: HSP a -> HSPEnv -> Maybe XMLMetaData -> IO (Maybe XMLMetaData, a) +runHSP hsp hspEnv xmd = runRWST (unXMLGenT hsp) hspEnv xmd >>= \(a,md,()) -> return (md, a) hunk ./src/HSP/Monad.hs 88 -runHSPT :: HSPT m a -> HSPEnv -> m a -runHSPT = runReaderT . unXMLGenT +runHSPT :: (Monad m) => HSPT m a -> HSPEnv -> Maybe XMLMetaData -> m (Maybe XMLMetaData, a) +runHSPT hsp hspEnv xmd = runRWST (unXMLGenT hsp) hspEnv xmd >>= \(a,md,()) -> return (md, a) hunk ./src/HSP/Monad.hs 91 -evalHSPT :: MonadIO m => HSPT m a -> m a -evalHSPT hsp = liftIO mkSimpleEnv >>= runHSPT hsp +evalHSPT :: MonadIO m => HSPT m a -> Maybe XMLMetaData -> m (Maybe XMLMetaData, a) +evalHSPT hsp xmd = liftIO mkSimpleEnv >>= \env -> runHSPT hsp env xmd hunk ./src/HSP/Monad.hs 94 -evalHSP :: HSP a -> IO a -evalHSP hsp = mkSimpleEnv >>= runHSP hsp +evalHSP :: HSP a -> Maybe XMLMetaData -> IO (Maybe XMLMetaData, a) +evalHSP hsp xmd = mkSimpleEnv >>= \env -> runHSP hsp env xmd hunk ./src/HSP/Monad.hs 99 -unsafeRunHSP :: HSP a -> IO a -unsafeRunHSP hspf = runHSP hspf dummyEnv +unsafeRunHSP :: HSP a -> IO (Maybe XMLMetaData, a) +unsafeRunHSP hspf = runHSP hspf dummyEnv Nothing hunk ./src/HSP/Monad.hs 106 +setMetaData :: (Monad m) => (Maybe XMLMetaData) -> HSPT m () +setMetaData xmd = lift (put xmd) + +withMetaData :: (Monad m) => Maybe XMLMetaData -> HSPT m a -> HSPT m a +withMetaData xmd h = do + x <- h + setMetaData xmd + return x + hunk ./src/HSP/Monad.hs 138 -catch (XMLGenT (ReaderT f)) handler = XMLGenT $ ReaderT $ \e -> - f e `catchDyn` (\ex -> (let (XMLGenT (ReaderT g)) = handler ex - in g e)) +catch (XMLGenT (RWST f)) handler = XMLGenT $ RWST $ \e s -> + f e s `catchDyn` (\ex -> (let (XMLGenT (RWST g)) = handler ex + in g e s)) hunk ./src/HSP.hs 3 - HSP, HSPT, HSPT', runHSP, evalHSP, runHSPT, evalHSPT, getEnv, - getParam, getIncNumber, doIO, catch, + HSP, HSPT, HSPT', XMLMetaData(..), runHSP, evalHSP, runHSPT, evalHSPT, getEnv, + getParam, getIncNumber, doIO, catch, setMetaData, withMetaData, html4Strict, html4StrictFrag, }