# :: a -> [a] -> Bool

elem is the list membership predicate, usually written in infix form, e.g., x `elem` xs. For the result to be False, the list must be finite; True, however, results from an element equal to x found at a finite index of a finite or infinite list.
```>>> 3 `elem` []
False

>>> 3 `elem` [1,2]
False

>>> 3 `elem` [1,2,3,4,5]
True

>>> 3 `elem` [1..]
True

>>> 3 `elem` [4..]
* Hangs forever *
```
notElem is the negation of elem.
```>>> 3 `notElem` []
True

>>> 3 `notElem` [1,2]
True

>>> 3 `notElem` [1,2,3,4,5]
False

>>> 3 `notElem` [1..]
False

>>> 3 `notElem` [4..]
* Hangs forever *
```
(∈) = elem U+2208, ELEMENT OF
(∉) = notElem U+2209, NOT AN ELEMENT OF
The member function returns True if the element appears in the ordered list.
Test element using ordered set.
Test not element using ordered set.
Does the element occur in the structure? Note: elem is often used in infix form.

#### Examples

Basic usage:
```>>> 3 `elem` []
False
```
```>>> 3 `elem` [1,2]
False
```
```>>> 3 `elem` [1,2,3,4,5]
True
```
For infinite structures, the default implementation of elem terminates if the sought-after value exists at a finite distance from the left side of the structure:
```>>> 3 `elem` [1..]
True
```
```>>> 3 `elem` ([4..] ++ [3])
* Hangs forever *
```
notElem is the negation of elem.

#### Examples

Basic usage:
```>>> 3 `notElem` []
True
```
```>>> 3 `notElem` [1,2]
True
```
```>>> 3 `notElem` [1,2,3,4,5]
False
```
For infinite structures, notElem terminates if the value exists at a finite distance from the left side of the structure:
```>>> 3 `notElem` [1..]
False
```
```>>> 3 `notElem` ([4..] ++ [3])
* Hangs forever *
```
Does the element occur in the structure?
O(n) Check if the vector contains an element.
O(n) Check if the vector does not contain an element (inverse of elem).
O(n) Check if the vector contains an element
O(n) Check if the vector does not contain an element (inverse of elem)
(∈) = elem U+2208, ELEMENT OF
(∉) = notElem U+2209, NOT AN ELEMENT OF
(∋) = flip (∈) U+220B, CONTAINS AS MEMBER
(∌) = flip (∉) U+220C, DOES NOT CONTAIN AS MEMBER
The has function returns True if the element appears in the list; it is equivalent to member except the order of the arguments is reversed, making it a function from an ordered list to its characteristic function.
Check membership for the same list often. Use partially applied to create membership predicate hasElem xs :: a -> Bool.
• First time: O(n log n) in the worst case.
• Subsequently: O(log n).
Specification: hasElem xs == (elem xs).