On 8/17/07, rodrigo.bonifacio <[EMAIL PROTECTED]> wrote: > Hi all. > > I want to create the following polymorphic type (EnvItem) that we can apply > two functions (envKey and envValue). I tried the following: > > > type Key = String > > > data EnvItem a = EnvItem (Key, a) > > > envKey :: EnvItem (Key, a) -> String > > envKey EnvItem (key, value) = key > > > envValue :: EnvValue(Key, a) -> a > > envValue EnvItem (key, value) = value > > But this is resulting in the error: [Constructor "EnvItem" must have exactly > 1 argument in pattern] > > I think this is a very basic problem, but I don't know what is wrong. > > Regards, > > Rodrigo.
In addition to what others have already said, I'd like to point out that you do not really need a tuple in your data item. > data EnvItem a = EI Key a > envKey :: EnvItem a -> Key > envKey (EI key _) = key > envValue :: EnvValue a -> a > envValue (EI _ value) = value Also, you made a distinction between 'Key' and 'String', which is good. But then in 'envKey', you used 'String' in the signature instead of 'Key'.That's a little confusing, and also should you ever want to change the representation of 'Key', you would then have to change the signature of envKey. Just my two cents, Bryan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe