list comprehension
Ch. A. Herrmann
herrmann@infosun.fmi.uni-passau.de
Fri, 19 Oct 2001 11:28:33 +0200
>>>>> "Stephanie" == Stephanie Randles <srandles@bigpond.net.au> writes:
Stephanie> Hi, I have a script here
Stephanie> interleave :: [Integer] -> [Strings] -> [String]
Stephanie> interleave (x:xs) (y:ys) = words [a | a <- (unwords
Stephanie> [(show x), (filter (/= 1) y), "+"])]
Stephanie> and the error message i receive is
Stephanie> (Instance of Num Char required for definition of
Stephanie> interleave)
the difficult error message is due to the flexibility of the
type class system in Haskell.
The variable y is of type String, i.e., a list of Char. You try
to compare a number (/= 1) with a character (an element of y taken
by filter).
The number constant 1 imposes the type class Num (for numbers) via the
comparison to this character, but you have not made Char an
instance of class Num (define +, -, * on Char). Probably that's
not what you want; the error message does not address the logical
source of error but the point where the constraints mismatched.
Good luck
--
Christoph Herrmann