Наиболее естественный подход для map+filter
, когда задействован option
, заключается в использовании choose
, который объединяет эти две операции и удаляет обертку параметров из отфильтрованного вывода.
Ваш пример будет выглядеть примерно так:
let getGrouped (l: tmp list) =
l
|> List.choose (fun a ->
a.B
|> Option.map (fun b -> {A = a.A; B = b})
|> List.groupBy (fun a -> a.A)