[Haskell-cafe] Re: Would someone explain this code to me?

2006-12-06 Thread Jón Fairbairn
Justin Bailey [EMAIL PROTECTED] writes:

 I'm reading Chris Okasaki's Purely Functional Data Structures, and some
 of  his Haskell  is confusing me. He defines the type Color and RedBlackSet
 as:
 
   data Color = R | B
   data RedBlackSet a = E | T Color (RedBlackSet a) a (RedBlackSet a)
 
 and then later he defines a function insertSet:
 
 insertSet x s = T B a y b
   where ins E = T R E x E
 ...
 T _ a y b = ins s
 
 What I don't understand is his use of the T constructor, both at
 
 insertSet x s = T B a y b

Here it creates a new RedBlackSet

 and in the where statement:
 
 T _ a y b = ins s

Here it's a pattern match. So if ins s returns (T x a' y'
b'), then a = a'; y = y'; b = b' are used in the expresion
covered by the where clause.
 
-- 
Jón Fairbairn [EMAIL PROTECTED]


___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] Re: Would someone explain this code to me?

2006-12-06 Thread Justin Bailey

On 06 Dec 2006 19:33:51 +, Jón Fairbairn [EMAIL PROTECTED]
wrote:


 and in the where statement:

 T _ a y b = ins s

Here it's a pattern match. So if ins s returns (T x a' y'
b'), then a = a'; y = y'; b = b' are used in the expresion
covered by the where clause.



Great, thanks for clearing that up. Sometimes Haskell is a bit too concise!

Justin
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


[Haskell-cafe] Re: Would someone explain this code to me?

2006-12-06 Thread Matthew Brecknell
  What I don't understand is his use of the T constructor, both at
  
  insertSet x s = T B a y b
 
 Here it creates a new RedBlackSet
 
  and in the where statement:
  
  T _ a y b = ins s
 
 Here it's a pattern match. So if ins s returns (T x a' y'
 b'), then a = a'; y = y'; b = b' are used in the expresion
 covered by the where clause.

If you're wondering how the compiler tells the difference, have a look
at section 2.4 of the Haskell 98 Report (Identifiers and Operators).
Roughly, an identifier beginning with a lowercase letter or underscore
must be a variable identifier, while an identifier beginning with an
uppercase letter must be a constructor identifier.

In other words, the second example above cannot be the definition of a
function called T, because T cannot be the name of a function.

___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe