В следующем коде обратите внимание на ограничение типа для get_Zero:
type Wrapper<'t> = { Data : 't[] }
let compute<'t
when 't : (static member get_Zero : unit -> 't)
and 't : (static member (~-) : 't -> 't)
and 't : (static member (+) : 't * 't -> 't)>
(wrapper : Wrapper<'t>) =
wrapper.Data
|> Seq.mapi (fun i value -> (i, value))
|> Seq.sumBy (fun (i, value) ->
if i % 2 = 0 then value
else -value)
Несмотря на то, что у меня уже есть явное ограничение типа, я все еще получаю следующую ошибку компилятора при вызове Seq.sumBy:
В параметре типа отсутствует ограничение «когда ^t : (статический член get_Zero : -> ^t)»
Кто-нибудь знает, что здесь происходит? Спасибо.
static member
и т. д., тогда функция должна бытьinline
и вместо использования'T
, вместо этого используйте^t
(имеется в виду:^
, а не'
). См. также: docs.microsoft .com/en-us/dotnet/fsharp/language-reference/ - person Abel   schedule 01.11.2019