[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


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 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