Introduction
Today I am going to explain about the Functions supporting IEnumerable Interface and how they work with Collections in F#. F# gives a seq alias to IEnumerable interface that's why the module is called seq. why we give this alias name to the IEnumerable interface. The reason for this is to make it easy to read and Type and we use this short name for type definition.
These Functions names are given below.
| Function Name |
| exists and forall |
| fold |
| concat |
| iter and map |
| choose |
| unfold |
| cast |
| init and initinfinite |
| find,filter and tryFind |
exists and forall
When you want to make an assertion about the content of the collection then both functions are helpful in the situation.
Example

let intArray = [|0; 1; 2; 3; 4; 5; 6; 7; 8; 9|]
let existsMultipleOfTwo =
intArray |>
Seq.exists (fun x -> x % 2 = 0)
let allMultipleOfTwo =
intArray |>
Seq.forall (fun x -> x % 2 = 0)
printfn "existsMultipleOfTwo: %b" existsMultipleOfTwo
printfn "allMultipleOfTwo: %b" allMultipleOfTwo
Output

fold
When you want to create summary of the list by folding the items in the collection together this function is helpful.
Example

let myPhrase = [|"How"; "are"; "you"; "Dea?"|]
let myCompletePhrase =
myPhrase |>
Seq.fold (fun acc n -> acc + " " + n) ""
printfn "%s" myCompletePhrase
Output

concat
If you want to concatenate a collection of collections into one collection then this function is used.
Example

open System.Collections.Generic
let myList =
let temp = new List<int[]>()
temp.Add([|5; 6; 7|])
temp.Add([|8; 9; 10|])
temp.Add([|11; 12; 13|])
temp
let myCompleteList = Seq.concat myList
myCompleteList |> Seq.iter (fun n -> printf "%i ... " n)
Output

iter and map
Both the functions let you apply a given function to every item in the collection.
Example

let myArr = [|4; 5; 6|]
let myNewCollection =
myArr |>
Seq.map (fun N -> N * 3)
printfn "%A" myArr
myNewCollection |> Seq.iter (fun N -> printf "%i ... " N)
Output

choose
You can perform a filter and a map task at the same time with the help of this function.
Example

let floatArray = [|0.5; 0.50; 0.75; 1.0; 1.25; 1.50; 1.75;2.0 |]
let integers =
floatArray |>
Seq.choose
(fun n ->
let a = n * 2.0
let b = floor a
if a- b = 0.0 then
Some (int b)
else
None)
integers |> Seq.iter (fun n -> printf "%i ... " n)
Output

unfold
If you want to initialize a list then this provides a more flexible way for initialization.
Example
let fibs =
(1,1) |> Seq.unfold
(fun (a0, a1) ->
Some(a0, (a1, a0 + a1)))
let first10 = Seq.take 20 fibs
printfn "%A" first10
Output

cast
If you want to convert a nongeneric version of an IEnumerable interface to IEnumerable<T>. This function provides a way to do this.
Example
open System.Collections
open System.Collections.Generic
let floatArrayList =
let temp = new ArrayList()
temp.AddRange([| 1.0; 2.0; 3.0 |])
temp
let (typedFloatSeq: seq<float>) = Seq.cast floatArrayList
Output
init and initinfinite
These functions helps to initialize the collections.
Example

let tenOnes = Seq.init 10 (fun _ -> 2)
let allIntegers = Seq.initInfinite (fun n -> System.Int32.MinValue + n)
let firstTenInts = Seq.take 10 allIntegers
tenOnes |> Seq.iter (fun n -> printf "%i ... " n)
printfn ""
printfn "%A" firstTenInts
Output

find filter and tryfind
These function are used and helpful when you want to choose an element from a list that meets a certain condition.
Example
let shortWordList = [|"hat"; "hot"; "bat"; "lot"; "mat"; "dot"; "rat";|]
let atWords =
shortWordList
|> Seq.filter (fun x -> x.EndsWith("at"))
let otWord =
shortWordList
|> Seq.find (fun x -> x.EndsWith("ot"))
let ttWord =
shortWordList
|> Seq.tryFind (fun x -> x.EndsWith("tt"))
atWords |> Seq.iter (fun x -> printf "%s ... " x)
printfn ""
printfn "%s" otWord
printfn "%s" (match ttWord with | Some x -> x | None -> "Not found")
Output
Summary
In this article I have discussed about Function Supporting IEnumerable interface in F#.