[add example using reader monad jeremy@n-heptane.com**20080829011502] { hunk ./src/HSP/AnyM.hs 5 -import HSP +import Data.Maybe (fromMaybe) -- for demos at bottom +import Data.List (lookup) -- for demos at bottom hunk ./src/HSP/AnyM.hs 8 +import Control.Monad.Reader -- for demos at bottom +import HSP hunk ./src/HSP/AnyM.hs 50 +instance (Monad m, Functor m) => EmbedAsChild (AnyM m) (AnyM m String) where + asChild c = + do c' <- lift c + lift . return . (:[]) . IChild . pcdata $ c' +-- return . (:[]) . IChild . + hunk ./src/HSP/AnyM.hs 100 -test :: IO () -test = evalAnyM page >>= putStrLn . renderAsHTML +testIO :: IO () +testIO = evalAnyM page >>= putStrLn . renderAsHTML + +testIdentity :: IO () +testIdentity = putStrLn (renderAsHTML (runIdentity (evalAnyM page))) hunk ./src/HSP/AnyM.hs 106 -test2 :: IO () -test2 = putStrLn (renderAsHTML (runIdentity (evalAnyM page))) +testReader :: IO () +testReader = putStrLn (renderAsHTML (runReader (evalAnyM page') [("title","sweet!"), ("paragraph","rock!") ])) + where + lookup' :: String -> AnyM (Reader [(String, String)]) String + lookup' n = AnyM $ + do env <- ask + return $ fromMaybe (n ++" not found in environment.") $ lookup n env + page' :: AnyMXML (Reader [(String, String)]) + page' = + +
+<% lookup' "paragraph" %>
+<% lookup' "doesNotExist" %>
+ + }