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

Reply via email to