On 1/25/07, <b class="gmail_sendername">Brandon S. Allbery KF8NH</b> &lt;<a href="mailto:allbery@ece.cmu.edu">allbery@ece.cmu.edu</a>&gt; wrote:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I&#39;m probably missing something, but:<br><br>(a) Why not:<br><br>data ANode = Branch { name :: String, description :: String,<br>children :: [AnyNode] }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Leaf { name :: String, value :: String } -- this reuse
<br>is legal<br>-- leaving Node available if you still need it</blockquote><div><br>Would I be able to this?<br><br>&nbsp;&nbsp; getLeaves :: ANode -&gt; [Leaf]<br><br>If not, is it the case that people generally don&#39;t bother and do this instead?
<br><br>&nbsp;&nbsp; getLeaves :: ANode -&gt; [ANode]<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">(b) I think you *can* do this with a class:
<br><br>class Node a where<br>&nbsp;&nbsp; name :: a -&gt; String<br><br>data Branch = Branch { brName :: String, ... }<br>data Leaf = Leaf { lName :: String, ... }<br><br>instance Node Branch where<br>&nbsp;&nbsp; name = brName<br><br>instance Node Leaf where
<br>&nbsp;&nbsp; name = lName<br></blockquote></div><br>Okay, though it&#39;s a lot more wordy.<br><br>-John<br><br>