free variable

Cagdas Ozgenc
Thu, 9 Aug 2001 11:26:51 +0300


I still have confusing regarding the following case:

elemNum2 :: Int -> [Int] -> Int
elemNum2 elem list = sum [ 1 | findElem <- list, elem == findElem ]

the function I wrote finds the number of occurences of an element in a list.
If I change it to the following:

elemNum2 elem list = sum [ 1 | elem <- list ]

Now it simply gives the length of the list. OK I understand that "elem" in
the list comprehension defines a new variable on the fly. What I do not
understand is in the first case:

"findElem <- list" findElem is a new variable, but "list" is not.
"elem==findElem" here for some reason "elem" is not a new variable.

Why does the rule only apply for "<-" operation, but not "==" for example?