Hello all. I&#39;ve got a puzzling Parsec problem. Perhaps the collective wisdom of haskell-cafe can point me in the right direction.<br><br>I want to be able to parse a string of digits to a type level numeral as described in the <a href="http://okmij.org/ftp/papers/number-parameterized-types.pdf">Number parameterized types</a> paper. After fiddling with the problem for a while, I&#39;m not convinced it&#39;s possible- it seems as though one would need to know the type of the result before parsing, but then we wouldn&#39;t need to parse in the first place. :) My first (simplified) approximation is as follows:<br>
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&gt; data Zero = Zero</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&gt; data Succ a = Succ a</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&gt; class Card t</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&gt; instance Card Zero</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&gt; instance (Card a) =&gt; Card (Succ a)</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&gt; parseP :: (Card a) =&gt; Parser a</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&gt; parseP = do { char &#39;1&#39;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&gt;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; rest &lt;- parseP</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&gt;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; return $ Succ rest </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&gt;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&gt;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;|&gt; return Zero</span><br><br>I&#39;d like for this to parse, for example, <span style="font-family: courier new,monospace;">&quot;111&quot;</span> into <span style="font-family: courier new,monospace;">Succ Succ Succ Zero</span>. Of course this doesn&#39;t work because <span style="font-family: courier new,monospace;">parseP</span> is ill-typed, but I&#39;m not sure how to fix it. It seems that what I&#39;m asking for is a function whose type is <span style="font-family: courier new,monospace;">forall a. (Card a) =&gt; String -&gt; a</span>, which is problematic.<br>
<br>Has anyone tried this before? I&#39;m new to using Parsec and to parsing in general, so I apologize if this is a silly question. (Parsec is very impressive, by the way.)<br><br>Thanks-<br><br>Nathan Bloomfield<br>University of Arkansas, Fayetteville<br>