Seq.choose - F#
Lets examine Seq.choose.
Seq.choose: Applies the given function to each element of the list. Return the list comprised of the results “x” for each element where the function returns Some(x). ~ FSharp.Core
In imperative languages where you might return null, F# leverages the Option type.
type Option<'a> =
| Some of 'a
| None
A result either exists (Some of ‘a) or it doesn’t exist (None). This is quiet common, and so Seq.choose
supports filtering and upwraping of Option types.
[<EntryPoint>]
let main argv =
let ids =
[Some 1; None; Some 2]
|> Seq.choose id
printfn "%A" ids
0
Our input sequence has 3 values, 2 of Some, 1 of None. Our Seq.choose
filters out the None and the output of this example is seq [1; 2]
.
The id function above is called the identity function. It returns whatever is passed to it. So in this case the function didn’t generate Some/None values, but just passed through already generated Some/None values from the input sequence. This stackoverflow has a great explanation.