[Haskell-cafe] Passing Constructors as arguments
Pierre Barbier de Reuille
pierre.barbier at cirad.fr
Wed Apr 13 10:58:48 EDT 2005
I don't really understand what you want to achieve : constructors are
functions, thus first class objects ...
I suppose you want a destructor, ie a function extracting the first name
from a property for example. You may want to have a look there :
http://haskell.org/hawiki/DecoratingStructures
Pierre
Ralph Hodgson a écrit :
> 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
> __________
>
> A Frames test
>
> > module Frames
> > where
> Define frame slots:
>
> > type FirstName = String -- first name
> > type LastName = String -- last name
> > type Organization = String
> > type Email = String
> > type WorkPhone = String
> > type CellPhone = String
> > type TelephoneNumber = String
>
> Define slots for a contact
>
> > data ContactProperty = FN FirstName
> > | LN LastName
> > | OR Organization
> > | EM Email
> > | WP TelephoneNumber
> > | MP TelephoneNumber
> > deriving (Show, Eq)
>
> > data Contact = Contact [ContactProperty]
> > deriving (Show, Eq)
>
> > type Contacts = [ Contact]
>
> 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.
>
> > getProperty:: [ContactProperty] -> FirstName
> > getProperty ((FN fn):_) = fn
> > getProperty (_:xs) = getProperty xs
> > getProperty [] = "unknown"
>
> > firstName:: Contact -> FirstNamen
> > firstName (Contact cpl) = getProperty cpl
>
>
> Define Contacts
>
> > c1::Contacts
> > c1 =
> > [ ( Contact [(FN "Ralph"),(LN "Hodgson"),(OR "TopQuadrant"),(EM
> "rhodgson at topquadrant.com")]),
> > ( Contact [(FN "Mills"),(LN "Davis"),(EM "mdavis at project10x.com")])]
>
> Tests
>
> > t1=firstName $ head c1 -- should be "Ralph"
> > t2=firstName $ last c1 -- should be "Mills"
> ___________________________
>
>
>
>
>
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
--
Pierre Barbier de Reuille
INRA - UMR Cirad/Inra/Cnrs/Univ.MontpellierII AMAP
Botanique et Bio-informatique de l'Architecture des Plantes
TA40/PSII, Boulevard de la Lironde
34398 MONTPELLIER CEDEX 5, France
tel : (33) 4 67 61 65 77 fax : (33) 4 67 61 56 68
More information about the Haskell-Cafe
mailing list