¿La mejor manera de condensar una lista de tipos de opciones solo en elementos que no son ninguno?

Inesperadamente, tengo algunos problemas para pasar de una lista de 'una opción a una lista que contiene solo los elementos que son Algunos.

Mi intento inicial fue:

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

Pero, por supuesto, este tipo de resultado sigue siendo una lista de opciones. No sé cómo usar List.map para condensar esto, porque tienes que manejar todos los casos en una declaración de coincidencia. Tengo una solución fea, pero me pregunto si hay algo mejor.

Feo:

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

Preferiría encontrar una solución no recursiva o averiguar cuál es la forma estándar para este tipo de cosas.

Respuestas a la pregunta(1)

Su respuesta a la pregunta