Hello bahadyr,<br><br>Before going into data Tree alpha, consider a simpler version,  tree that stores only an integer in it.<br><br>Now, a (binary) tree will consist of nodes. A node can be an Empty node or store an integer and link to two other nodes (a left one and a right one). So, basically we have only two types of nodes. We represent this in this way:<br>
<br><font face="&#39;courier new&#39;, monospace">data Node = Empty<br>          | ValueNode Int, Node, Node -- An integer, a left node and a right node</font><br><br>We construct this node this way: <br><font face="&#39;courier new&#39;, monospace">n = Empty --creates an empty node<br>
n = ValueNode 3, Empty, Empty -- A node containing only one value<br>n = ValueNode 3, (Node 4 Empty Empty), (Node 5 Empty Empty) -- 3 with left 4 and right 5</font><br><br>This has a limitation: we can store only integers in it. Let&#39;s remove that limitation by using Type Variables.<br>
Instead of saying that Node stores only Int, we must say that Node needs a Type first, then it stores values of that type in it.<br><br>So, instead of just:<br><br><font face="&#39;courier new&#39;, monospace">data Node</font><br>
<br><font face="arial, helvetica, sans-serif">we have</font><br><br><font face="&#39;courier new&#39;, monospace">data Node a = Empty -- a is the type variable</font><br> <br>Now, Node uses that a instead of Int<div><br></div>
<div><font face="&#39;courier new&#39;, monospace">data Node a = Empty</font></div><div><font face="&#39;courier new&#39;, monospace">            | ValueNode a, (Node a), (Node a)</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">(Node a), (Node a)</font><font face="arial, helvetica, sans-serif"> tell that the left and right of the trees must be of type (Node a) i.e. it cannot left cannot have an Int while right has a Char. The whole tree holds the same type.</font></div>
<div><br></div><div>The creation of objects is same as above. The types of x and y would now be <font face="&#39;courier new&#39;, monospace">x :: Node Int, y::Node Int</font></div><div><br></div><div>We can now have:</div>
<div><font face="&#39;courier new&#39;, monospace">c = ValueNode (&quot;haskell&quot;, Empty, Empty)</font> too.</div><div><br></div><div>Hope you are clear on this and welcome to Haskell!</div><div><br>On Fri, Feb 24, 2012 at 10:20 AM, bahadýr altan &lt;<a href="mailto:doaltan@yahoo.co.uk">doaltan@yahoo.co.uk</a>&gt; wrote:<br>
&gt; Hello. There is a code below and I couldn&#39;t understand it myself. Could you<br>&gt; help me with that please?  I especially have no idea about &quot;data Tree alpha<br>&gt; = Empty | Node &quot; part.<br>&gt;<br>
&gt;<br>&gt; data Tree alpha = Empty | Node ( alpha ,Tree alpha , Tree alpha )<br>&gt; x = Node (1,Node (2,Empty ,Empty),Node(3,Empty ,Empty))<br>&gt; y = Node(3,Empty ,Empty)<br>&gt;<br>&gt; Thanks in advance<br>&gt;<br>
&gt; _______________________________________________<br>&gt; Beginners mailing list<br>&gt; <a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>&gt; <a href="http://www.haskell.org/mailman/listinfo/beginners">http://www.haskell.org/mailman/listinfo/beginners</a><br>
&gt;<br><br>-- <br>Warm Regards,<br><br>AbdulSattar Mohammed<br></div>