Ваш код в основном правильный.Это еще один способ сделать то же самое:
let inline (|>!) v f = f v ; v // tee operator
let vowels = ['a';'e';'i';'o';'u']
let if_vowel c = vowels |> List.contains c
text
|> Seq.filter if_vowel
|>! (Seq.length >> printfn "vowels: %d")
|> Seq.countBy id
|> Seq.sort
|> Seq.iter (fun (c, n) -> printfn "%c: %d" c n)
Вывод похож, но не совсем совпадает с вашим, потому что он показывает только те гласные, которые присутствуют.