Review my F# BubbleSort Program
The first part could be rewritten as

match list with
| hd1 :: hd2 :: tl when hd1 &gt; hd2 -&gt; getHighest (hd1 :: tl)
| hd1 :: hd2 :: tl -&gt; getHighest (hd2::t1)
| hd1 :: [] -&gt; hd1
| _ -&gt; failwith "unknown pattern"


which is significantly simpler