A melhor maneira de condensar uma lista de tipos de opções até apenas elementos que não são nenhum?

Inesperadamente, estou tendo um pouco de dificuldade em passar de uma lista de 'uma opção para uma lista que contém apenas os elementos que são Some.

Minha tentativa inicial foi:

    let ga = List.filter (fun xx ->
        match xx with
        | Some(g) -> true
        | None -> false) gao 

Mas é claro que esse tipo de resultado ainda é uma lista de opções. Não sei como usar o List.map para condensar isso, porque você precisa lidar com todos os casos em uma declaração de correspondência. Eu tenho uma solução feia, mas estou me perguntando se há algo melhor.

Feio:

    let rec gOptRemove gdec gacc = 
        match gdec with 
        | head :: tail -> 
            match head with 
            | Some(a) -> gOptRemove tail (a :: gacc)
            | None -> gOptRemove tail gacc
        | [] -> gacc

Eu preferiria encontrar uma solução não recursiva ou descobrir qual é a maneira padrão para esse tipo de coisa.

questionAnswers(1)

yourAnswerToTheQuestion