<div dir="ltr"><br><br><div class="gmail_quote">On Sat, Sep 13, 2008 at 2:49 PM, Han Joosten <span dir="ltr">&lt;<a href="mailto:j.m.m.joosten@hccnet.nl">j.m.m.joosten@hccnet.nl</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Hi,<br>
<br>
I have a question about types in Haskell. I feel that I am overlooking some<br>
obvious solution, but I do not manage to get it right. Here is the plot:<br>
<br>
I have got 4 different types of &#39;rules&#39;, each with it&#39;s own constructor. &nbsp;So<br>
i defined:<br>
<br>
&gt; &nbsp;type Rules = [Rule]<br>
&gt; &nbsp;data Rule = RuRule<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| SgRule<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| GcRule<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| FrRule<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;deriving (Eq,Show)</blockquote><div><br></div><div>This effectively creates an enum type. I.e. each case here doesn&#39;t contain any data other than the &quot;tag&quot;. I think you&#39;re getting confused because the constructor is named the same as the type you&#39;re expecting to store. Try something like:&nbsp;</div>
<div><br></div><div>&gt; &nbsp;type Rules = [Rule]<br>&gt; &nbsp;data Rule = RuRule<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| MkSgRule&nbsp;SgRule</div><div>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| MkGcRule&nbsp;GcRule</div><div>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| MkFrRule&nbsp;FrRule</div><div>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;deriving (Eq,Show)<br>
</div><div><br></div><div>So MkSgRule is a &quot;tag&quot; or a &quot;label&quot; deciding which version of Rule you&#39;re building, and it also has a value of type SgRule.</div><div><br></div><div>Now you can create a list or Rule like so:</div>
<div><br></div><div>&gt;mylist :: [Rule]</div><div>&gt;mylist = [ MkSgRule mysgrule, MkGcRule mygcrule ]</div><div><br></div><div>where&nbsp;mysgrule :: SgRule and&nbsp;mygcrule :: GcRule.</div><div>&nbsp;</div></div><br>-- <br>Sebastian Sylvan<br>
+44(0)7857-300802<br>UIN: 44640862<br>
</div>