Итак, у меня есть список stmt
(алгебраический тип), который содержит число VarDecl
в списке. Я хотел бы сократить список от stmt list
до VarDecl list
. Когда я использую List.filter
, я могу устранить все другие типы, но я все еще остаюсь с stmt list
.Фильтрация списка OCaml по одному варианту
Я обнаружил, что мне удалось выполнить фильтрацию, а также изменить тип с помощью складывания, но я не могу понять, как его обобщить (мне нужен этот шаблон во многих местах проекта).
let decls = List.fold_left
(fun lst st -> match st with
| VarDecl(vd) -> vd :: lst
| _ -> lst
) [] stmts in
Есть ли лучший способ выполнить фильтр и применить к варианту типа списка?
К сожалению, я должен был быть более конкретным. Список аргументов представляет собой группу вариантов, и я пытаюсь свести его к одному варианту. –
Если есть только один вариант, тип все равно 'stmt list'. Он не меняет тип, который звучит так, как вы просите. –