Краткий ответ: нет.
Более длинный ответ: вы, конечно, можете создавать функции с привязкой к элементам в модуле, которые вызывают метод для данного типа ... Например, в коде
let l = [1;2;3]
let h1 = l.Head
let h2 = List.hd l
в определенном смысле "List.hd" - это версия того, что вы хотите для ".Head on a list". Или на месте, вы всегда можете сделать, например,
let AnotherWay = (fun (l:list<_>) -> l.Head)
let h3 = AnotherWay l
Но в этом нет ничего общего, поскольку нет хорошего способа «назвать» метод произвольного экземпляра для данного типа; AnotherWay показывает способ «сделать функцию из свойства« Head »объекта« list <_> », но вам нужен такой шаблон для каждого метода экземпляра, который вы хотите рассматривать как значение функции первого класса.
Я предложил создать языковую конструкцию для обобщения этого:
Что касается языкового дизайна
предложения, что если
SomeType..Foo optArgs // note *two* dots
означает
fun (x : SomeType) -> x.Foo optArgs
В таком случае вы могли бы написать
list<_>..Head
как способ «функционализировать» это свойство экземпляра, но если мы когда-нибудь что-нибудь сделаем на этой арене в F #, это будет после VS2010.