Question: I'm trying to write a function that takes a list and an element to look for in that list and returns true if the element is in the list and false otherwise. I want to use List.Fold to make the function much shorter. Right now it looks like this

```
let isInList(elementToFind, listToCheck) = 
    List.fold(fun(a, b) -> a=elementToFind or b), false, listToCheck;

```

However, I'm getting a syntax error at a=elementToFind or b saying that the expression was expected to have 'a -> 'b \* 'c but has bool. I'm pretty new to F# and functional programming in general so any help I could get here would be greatly appreciated.

Answer: 
Way too many parenthesis and comas in your code.

To declare a function that takes 2 parameters you should use

```
let f param1 param2 = ...

```

No parenthesis, no comas. If you define a function as 

```
let f2 (param1, param2) = ...

```

you define a function that takes 1 argument, and this argument is a 2-element tuple.

Removing all comas and almost all parenthesis from the code will leave one more error - the parameters of the function you pass to `List.fold` are in wrong order.

```
let isInList elementToFind listToCheck = 
    List.fold(fun acc elem -> elem=elementToFind || acc) false listToCheck

```

You should also check the documentation of the [List module](https://msdn.microsoft.com/en-us/library/ee353738.aspx). There are many useful functions there, for example [`List.exists`](https://msdn.microsoft.com/en-us/library/ee370309.aspx)
When performance is needed you better use tryFind, because fold is non-short-circuit.
That means if the list is 1 Mio. elements long and the first element is searched, the fold runs until the end of the list.

```
let isInList elementToFind listToCheck = 
    List.tryFind ((=) elementToFind) listToCheck

let x = [1;2;2;3]
let y = 4
let z = 2

isInList y x |> printfn "%A"    // None    
isInList z x |> printfn "%A"    // Some 2

```