Предположим, у меня есть следующий код:
type Vehicle =
| Car of string * int
| Bike of string
let xs = [ Car("family", 8); Bike("racing"); Car("sports", 2); Bike("chopper") ]
Я могу отфильтровать приведенный выше список, используя неполное сопоставление с шаблоном в императивном цикле for, например:
> for Car(kind, _) in xs do
> printfn "found %s" kind;;
found family
found sports
val it : unit = ()
, но это вызовет:warning FS0025: Incomplete pattern matches on this expression. For example, the value 'Bike (_)' may indicate a case not covered by the pattern(s). Unmatched elements will be ignored.
Поскольку мое намерение заключается в игнорировании несопоставимых элементов, есть ли возможность избавиться от этого предупреждения?
И есть ли способ заставить эту работу работать со списками-пониманиями безвызывая MatchFailureException?например что-то вроде этого:
> [for Car(_, seats) in xs -> seats] |> List.sum;;
val it : int = 10