
Hi, module Main where allwords :: IO Int allwords = do dict <- readFile "data/dict.txt" return $ length [x | x <- dict , not $ '-' `elem` x] main :: IO Int main = do allwords error * Couldn't match expected type `t0 Char' with actual type `Char' * In the second argument of `elem', namely `x' In the second argument of `($)', namely '-' `elem` x In the expression: not $ '-' `elem` x could someone tell me what I am doing wrong? thanks!

Hey Alexander, |dict| has type |String|. Therefore, |x| is of type |Char|, but |elem '-'| is of type |[Char] -> Bool| (simplified). Hence, you get a type mismatch. If you just want to count every character except |'-'|, then you could just you |'-' /= x|. Cheers Tobias On 8/13/20 1:02 PM, Alexander Chen wrote:
Hi,
module Main where allwords :: IO Int allwords = do dict <- readFile "data/dict.txt" return $ length [x | x <- dict , not $ '-' `elem` x] main :: IO Int main = do allwords
error
* Couldn't match expected type `t0 Char' with actual type `Char' * In the second argument of `elem', namely `x' In the second argument of `($)', namely '-' `elem` x In the expression: not $ '-' `elem` x
could someone tell me what I am doing wrong?
thanks!
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

Hello Alexander Il 13 agosto 2020 alle 13:02 Alexander Chen ha scritto:
allwords :: IO Int allwords = do dict <- readFile "data/dict.txt" return $ length [x | x <- dict , not $ '-' `elem` x]
`elem` has type: λ> :t elem elem :: Eq a => a -> [a] -> Bool -- almost You are comparing '-' (a `Char`) with `x` (another `Char`), hence you only need `==`. Does this make sense? —F

On Thu, Aug 13, 2020 at 01:02:19PM +0200, Alexander Chen wrote:
module Main where
allwords :: IO Int allwords = do dict <- readFile "data/dict.txt" return $ length [x | x <- dict , not $ '-' `elem` x] main :: IO Int main = do allwords
error
* Couldn't match expected type `t0 Char' with actual type `Char' * In the second argument of `elem', namely `x' In the second argument of `($)', namely '-' `elem` x In the expression: not $ '-' `elem` x
could someone tell me what I am doing wrong?
dict is of type String, since it's a String containing the complete file. That's why the type complaint is that you want to check if '-' (a Char) is an element of x, which is also a Char, which cannot work. I asssume what you want is a list of lines, which you can by applying the lines function, e.g. here: return $ length [x | x <- lines dict , not $ '-' `elem` x] HTH, Cheers, Alex
participants (4)
-
Alexander Chen
-
Alexander Klink
-
Francesco Ariis
-
Tobias Brandt