[Haskell-cafe] Passing Constructors as arguments

Ralph Hodgson ralphtq at mac.com
Wed Apr 13 11:14:39 EDT 2005


Thanks for your help Daniel - I am clarifying my message

Daniel Fischer wrote:

>Am Mittwoch, 13. April 2005 15:43 schrieb Ralph Hodgson:
>  
>
>>I am learning Haskell and have set a small exercise for myself on a
>>frames and slots program.
>>Would appreciate some help on how to pass constructors of data
>>structures as arguments to a function.
>>
>>Thanks,
>>
>>-- Ralph
>>    
>>
><snip>
>  
>
>>Now I need a way to extract properties from the frame. Start by testing
>>pattern matching
>>without using parameters. Then I need to find out how to pass a
>>constructor as a parameter.
>>
>>    
>>
>Your code works fine. 
>I'm not sure, what your problem is.
>Given type-correctness, data constructors can be passed as arguments to 
>functions like any other function. Probably that's not your question, 
>however. 
>  
>

I would like to see an example of passing constructors as arguments. I 
am still getting familiar with constructs like:

 > getProperty ( a -> b) -> [ContactProperty] -> b

I am not sure how to test the Constructor passed as the argument. Do I 
say the following:

 > getProperty c ((c v:_) = v
 > getProperty c ((_:xs) = getProperty c xs
..

I have tried doing this but GHC gives me parse errors. There is  Haskell 
syntax that I don't know yet that I need to learn.

>As a wild guess, maybe you should use labelled records,
>
>data Contact = Contact
>                     { firstName :: FirstName
>                     , lastName :: LastName
>                     , ...
>                     }
>
>and you have your selector-functions.
>
>  
>
thanks - very useful

>And it's possible to define partial contacts as
>
>me = Contact{firstName="Daniel", lastName="Fischer"}
>
>-- just don't ask for my phone-number or anything else which is undefined.
>
>If I'm far off, state your problem more precisely.
>
>  
>
>> > getProperty:: [ContactProperty] -> FirstName
>> > getProperty ((FN fn):_) = fn
>> > getProperty     (_:xs)  = getProperty xs
>> > getProperty          [] = "unknown"
>> >
>> > firstName:: Contact -> FirstName
>> > firstName (Contact cpl) = getProperty cpl
>>    
>>
>
>Cheers,
>Daniel
>
>
>  
>



More information about the Haskell-Cafe mailing list