Глядя на источник в FSharp.Core и PowerPack, я вижу, что многие функции более высокого порядка, которые принимают функцию с двумя или более параметрами, используют FSharpFunc.Adapt. Например:
let mapi f (arr: ResizeArray<_>) =
let f = FSharpFunc<_,_,_>.Adapt(f)
let len = length arr
let res = new ResizeArray<_>(len)
for i = 0 to len - 1 do
res.Add(f.Invoke(i, arr.[i]))
res
Документация на FSharpFunc.Adapt
довольно тонкая. Является ли это общей передовой практикой, которую мы должны использовать в любое время, когда у нас есть функция более высокого порядка с аналогичной сигнатурой? Только если вызываемая функция вызывается несколько раз? Насколько оптимизируется это? Должны ли мы использовать Adapt
везде, где мы можем, или только редко?
Спасибо за ваше время.