Haskell isMember function error

isMember:: a -> [a] -> Bool
isMember y [] = False
isMember y (x:xs) =
 if y == x then
  True
 else
  isMember y xs

Trying to create a function that will determine if something is a member of a list. For example:

isMember 6 [1,2,3,4,5,6]
>True

However, I continue to receive a complier error message stating "there is no instance for (Eq a) associated with using" == "

Help would be appreciated (I am new to Haskell and Recursion in functional languages, so I’ll explain how I am five).

+6
source share
1 answer

you are almost there

isMember :: Eq a => a -> [a] -> Bool
isMember _ [] = False
isMember y (x:xs) =
 if y == x then True else isMember y xs

What the compiler tells you is that you promised to accept any type of list member, but later on you use a function ==that is not available for all types (like functions).

Eq a =>, , , equals.

()

isMember y (x:xs) = (y == x) || isMember y xs

( @chi ). , , .

- :

  • - (isMember _ [] = False)
  • (isMember y (x:xs) = ...)

, fold - (foldl, foldr...). ,

isMember y xs = foldl False (\x b -> (x == y) || b) xs
+8

All Articles