Существует два способа указать тип, который вы хотите получить. Брайан написал, как это сделать, явно указав параметр типа для функции:
let res = Seq.cast<Match> v.Captures
Другой вариант - использовать аннотации типа , которые можно поместить вокруг любого выражения F #, и указать тип выражения - таким образом вы можете намекнуть на вывод типа компилятора (говоря, что какое-то выражение имеет особый тип). Если вы предоставите информацию каким-то умным способом, компилятор сможет выяснить, каким должен быть параметр типа для Seq.cast
. Несколько примеров:
// By specifying type of the value
let (res:seq<Match>) = Seq.cast v.Captures
// By specifying return type of a function
let getCaptures () : seq<Match> =
// ...
Seq.cast v.Captures
// By specifying element type when iterating over the result
for (m:Match) in Seq.cast v.Captures do
// ...
Из всех опций я думаю, что Brians (явный) и мой второй (возвращаемый тип функции) являются наиболее идиоматическими, однако вы можете выбрать любой вариант, который вам наиболее удобен для чтения.