[Haskell-cafe] The semantics of constructor patterns

Cristian Baboi cristian.baboi at gmail.com
Sun Dec 30 12:18:29 EST 2007

On Sun, 30 Dec 2007 19:13:47 +0200, Jonathan Cast  
<jonathanccast at fastmail.fm> wrote:

> On 30 Dec 2007, at 11:10 AM, Cristian Baboi wrote:
>> In section 4.3.3., chapter 4: Structured types and the semantics of  
>> pattern-matching,  by S.Peyton Jones and Philip Wadler, there is this  
>> equation:
>> Eval[[\(s p1 p2 ... pt).E]] (s a1 a2 ...at) = Eval[[\p1 ... \pt.E]] a1  
>> ... at
>> The text say:
>> "To apply \(s p1 ... pt).E to an argument A we first evaluate A to find  
>> out what sort of object it is."
>> "Finally, if A was built with the same constructor as the patern, then  
>> the first rule applies."
>> What I don't get it :
>> (s a1 a2 ... at) must be the value of A in the semantic domain. Let  
>> call that value a.
>> Then how can one know if a was built with (s a1 a2 ... at) and not with  
>> (egg b1 b2) ?

> I suspect that s and egg are constructors, in which case their images  
> are (by definition) mutually exclusive.

I have not seen that definition in the book.

More information about the Haskell-Cafe mailing list