Лучший способ сократить список типов опций до элементов, которые не являются ни одним?
У меня неожиданно возникли проблемы с переходом от списка опций к списку, содержащему только элементы 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
Я бы предпочел найти нерекурсивное решение или выяснить, что является стандартным способом для такого рода вещей.