Hi,<br><br>Trying to write a function to deserialize a haskell type from xml.<br><br>Ideally this wont need a third &quot;DTD&quot; file, ie it will work something like XmlSerializer.Deserialize from C#:<br><br>deserializeXml :: Data(a) =&gt; String -&gt; a
<br>serializeXml :: Data(a) =&gt; a -&gt; String<br><br>Writing serializeXml is pretty easy:<br><pre class="haskell"><span style="color: rgb(0, 0, 153);"></span><span style="color: rgb(0, 0, 153);">import</span> Data.Generics
</pre><pre class="haskell"><span style="color: rgb(102, 102, 102);">-- helper function from <a href="http://www.defmacro.org/ramblings/haskell-web.html">http://www.defmacro.org/ramblings/haskell-web.html</a></span><br>introspectData 
<span style="color: rgb(0, 0, 153);">::</span> Data a =<span style="color: rgb(0, 102, 0);">&gt;</span> a <span style="color: rgb(0, 0, 153);">-&gt;</span> <span style="color: black;">[</span><span style="color: black;">(
</span><a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:String"><span style="color: rgb(102, 0, 0);">String</span></a>, <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:String">
<span style="color: rgb(102, 0, 0);">String</span></a><span style="color: black;">)</span><span style="color: black;">]</span><br>introspectData a = <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:zip">
<span style="color: rgb(0, 102, 0);">zip</span></a> fields <span style="color: black;">(</span>gmapQ gshow a<span style="color: black;">)</span><br>    <span style="color: rgb(0, 0, 153);">where</span> fields = constrFields 
<a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:."><span style="color: rgb(0, 102, 0);">$</span></a> toConstr a<br>&nbsp;<br><span style="color: rgb(102, 102, 102);">-- function to create xml string from single-layer Haskell data type
</span><br>serializeXml object = <span style="color: rgb(0, 51, 0);">&quot;&lt;&quot;</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:."><span style="color: rgb(0, 102, 0);">++</span>
</a> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:show"><span style="color: rgb(0, 102, 0);">show</span></a><span style="color: black;">(</span>toConstr object<span style="color: black;">
)</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:."><span style="color: rgb(0, 102, 0);">++</span></a> <span style="color: rgb(0, 51, 0);">&quot;&gt;&quot;</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:.">
<span style="color: rgb(0, 102, 0);">++</span></a> <br>   <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:foldr"><span style="color: rgb(0, 102, 0);">foldr</span></a> <span style="color: black;">
(</span>\<span style="color: black;">(</span>a,b<span style="color: black;">)</span> x  <span style="color: rgb(0, 0, 153);">-&gt;</span> x <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:.">
<span style="color: rgb(0, 102, 0);">++</span></a> <span style="color: rgb(0, 51, 0);">&quot;&lt;&quot;</span> ++ a ++ <span style="color: rgb(0, 51, 0);">&quot;&gt;&quot;</span> ++ b ++ <span style="color: rgb(0, 51, 0);">
&quot;&lt;/&quot;</span> ++ a ++ <span style="color: rgb(0, 51, 0);">&quot;&gt;&quot;</span><span style="color: black;">)</span> <span style="color: rgb(0, 51, 0);">&quot;&quot;</span> <span style="color: black;">(</span>
 introspectData object <span style="color: black;">)</span><br>   <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:."><span style="color: rgb(0, 102, 0);">++</span></a> <span style="color: rgb(0, 51, 0);">
&quot;&lt;/&quot;</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:."><span style="color: rgb(0, 102, 0);">++</span></a> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:show">
<span style="color: rgb(0, 102, 0);">show</span></a><span style="color: black;">(</span>toConstr object<span style="color: black;">)</span> <a href="http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:.">
<span style="color: rgb(0, 102, 0);">++</span></a> <span style="color: rgb(0, 51, 0);">&quot;&gt;&quot;</span></pre><br>... however cant figure out how to go the other way.<br><br>Usage of haxml or HXT to achieve this is ok, whatever it takes ;-)
<br><br>