> From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of > > This simple function definition that should rotate a list > (put the first > item in the last place) fails with a rather cryptic error with ghc: > > f :: [a] ->[a] ->[a] > f (w : ws) = ws : w > > Couldn't match expected type `[a] -> [a]' > against inferred type `[[a]]' > In the expression: ws : w > In the definition of `f': f (w : ws) = ws : w
Well, there are a few problems. First, you've given a type sig which suggests that f takes two arguments (both lists of type [a]) and returns a list of type [a]. However, there is only one argument to f. A type sig that better matches your function definition might be f :: [a] -> [a] Second, the pattern matching in f (w:ws) matches the first item of the list to w, and the rest of the list to ws. The type of the first item in the list will be a, not [a]. Third, in the body of the function you're trying to join ws, which has type [a], to w, which has type a. The (:) operator (AKA cons) expects arguments of types a and [a] respectively i.e. the other way around from what you have. I suspect you might want a different operator... Hope this helps, Alistair ***************************************************************** Confidentiality Note: The information contained in this message, and any attachments, may contain confidential and/or privileged material. It is intended solely for the person(s) or entity to which it is addressed. Any review, retransmission, dissemination, or taking of any action in reliance upon this information by persons or entities other than the intended recipient(s) is prohibited. If you received this in error, please contact the sender and delete the material from any computer. ***************************************************************** _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe