<br><font size=2 face="Courier New">In the following code which uses template
haskell, how can I get back the macro-expanded code generated from </font>
<br>
<br><font size=2 face="Courier New">$(inferStartState ''MyState)</font>
<br>
<br><font size=2 face="Courier New">I *can* recover the macro-expanded
code for </font>
<br>
<br><font size=2 face="Courier New">$(cnst 1 &quot;x&quot;) </font>
<br>
<br><font size=2 face="Courier New">using a debugging technique bulat describes
on his tutorial at http://www.haskell.org/bz/th3.htm</font>
<br>
<br><font size=2 face="Courier New">You can see what's going on in the
function debugTemplates below.</font>
<br>
<br><font size=2 face="Courier New">I'm trying to do this actually, to
better understand how HAppS deals with state. It's a bit opaque now since
the example on the tutorial uses TH. I think I would understand it better
if I had code that didn't depend on TH.</font>
<br>
<br><font size=2 face="Courier New">(MyState is from the happs tutorial
at http://www.haskell.org/haskellwiki/HAppS_tutorial )</font>
<br>
<br><font size=2 face="Courier New">thanks!</font>
<br>
<br><font size=2 face="Courier New">thomas.</font>
<br>
<br><font size=2 face="Courier New">{-# OPTIONS -fglasgow-exts -fth &nbsp;#-}</font>
<br><font size=2 face="Courier New">module MyState where</font>
<br><font size=2 face="Courier New">import HAppS</font>
<br><font size=2 face="Courier New">import HAppS.Protocols.SimpleHTTP2</font>
<br><font size=2 face="Courier New">&nbsp;</font>
<br><font size=2 face="Courier New">import Data.Monoid</font>
<br><font size=2 face="Courier New">import Data.Typeable</font>
<br><font size=2 face="Courier New">import Control.Monad.State (get, put)</font>
<br>
<br><font size=2 face="Courier New">import Language.Haskell.TH</font>
<br><font size=2 face="Courier New">import Language.Haskell.TH.Syntax</font>
<br><font size=2 face="Courier New">&nbsp;</font>
<br><font size=2 face="Courier New">data MyState = MySt { appVal :: Int
} deriving (Read, Show, Typeable)</font>
<br><font size=2 face="Courier New">&nbsp;</font>
<br><font size=2 face="Courier New">instance Serialize MyState where</font>
<br><font size=2 face="Courier New">&nbsp; encodeStringM = defaultEncodeStringM</font>
<br><font size=2 face="Courier New">&nbsp; decodeStringM = defaultDecodeStringM</font>
<br><font size=2 face="Courier New">&nbsp;</font>
<br><font size=2 face="Courier New">instance Monoid MyState where</font>
<br><font size=2 face="Courier New">&nbsp; mempty = MySt 0</font>
<br><font size=2 face="Courier New">&nbsp; mappend (MySt x) (MySt y) =
MySt (x+y)</font>
<br><font size=2 face="Courier New">&nbsp;</font>
<br><font size=2 face="Courier New">-- in ghci... &nbsp;-fth, :m +</font>
<br>
<br><font size=2 face="Courier New">-- ghci... :t (inferStartState ''MyState)
:: (Quasi m) =&gt; m [Dec]</font>
<br><font size=2 face="Courier New">$(inferStartState ''MyState) -- boilerplate
that will eventually be SYB</font>
<br>
<br><font size=2 face="Courier New">-- ghci... :t cnst 1 &quot;x&quot;
:: (Monad m) =&gt; m Exp</font>
<br><font size=2 face="Courier New">cnst n s = return (LamE (replicate
n WildP) (LitE (StringL s)))</font>
<br>
<br><font size=2 face="Courier New">dumpSplice splice = runQ splice &gt;&gt;=
putStrLn . pprint</font>
<br><font size=2 face="Courier New">debugTemplates = do dumpSplice (cnst
1 &quot;x&quot;)</font>
<br><font size=2 face="Courier New">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dumpSplice (inferStartState ''MyState)</font>
<br>
<br><font size=2 face="Courier New">{-</font>
<br><font size=2 face="Courier New">*MyState&gt; debugTemplates</font>
<br><font size=2 face="Courier New">\_ -&gt; &quot;x&quot;</font>
<br><font size=2 face="Courier New">Template Haskell error: Can't do `reify'
in the IO monad</font>
<br><font size=2 face="Courier New">*** Exception: user error (Template
Haskell failure)</font>
<br><font size=2 face="Courier New">-}</font>
<br>
<br>
<br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">---</span><br>
<br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">This e-mail may contain confidential and/or privileged information. If you </span><br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">are not the intended recipient (or have received this e-mail in error) </span><br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">please notify the sender immediately and destroy this e-mail. Any </span><br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">unauthorized copying, disclosure or distribution of the material in this </span><br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">e-mail is strictly forbidden.</span><br>