Лучший способ сократить список типов опций до элементов, которые не являются ни одним?

У меня неожиданно возникли проблемы с переходом от списка опций к списку, содержащему только элементы Some.

Моя первая попытка была:

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

Но, конечно, этот тип результата по-прежнему «список опций». Я не знаю, как использовать List.map, чтобы сжать это, потому что вы должны обрабатывать все случаи в выражении match. У меня есть ужасное решение, но мне интересно, есть ли что-то лучше.

Гадкий:

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

Я бы предпочел найти нерекурсивное решение или выяснить, что является стандартным способом для такого рода вещей.

Ответы на вопрос(1)

Ваш ответ на вопрос