I will take the first sentence from @Mark Seemann and start with it to make it general, work with any type of collection and handle the case of an empty collection intelligently.
let tryMinMax xs = Seq.fold (function | Some(mn, mx) -> fun i -> Some(min mn i, max mx i) | None -> fun i -> Some(i, i) ) None xs [1;0;-1;2;0;-4] |> tryMinMax // val it : (int * int) option = Some (-4, 2)
For the most common part of the question:
let mostFrequent xs = xs |> Seq.countBy id |> Seq.maxBy snd |> fst [1;0;-1;2;0;-4] |> mostFrequent
source share