Я хочу написать функцию на F #, которая предоставляет следующую сигнатуру типа для C #:
public static FSharpFunc<FSharpFunc<Unit,Unit>,Unit> foo(Action<Action> f)
В F # я пытался написать:
let foo (f : Action<Action>) : ((unit -> unit) -> unit) = ...
Но это создает сигнатуру C #:
public static void foo(Action<Action> f, FSharpFunc<Unit,Unit> x)
F # обработал мой код эквивалентно:
let foo (f : Action<Action>) (g : unit -> unit) : unit = ...
Конечно, они эквивалентны F #, но сильно отличаются в C #. Что я могу сделать, чтобы создать C #, который я хочу? (F # 2.0.0.0)
В качестве быстрого взлома я переписал свой F # на:
let foo (f : Action<Action>) ((unit -> unit) -> unit)[] = ...
Тогда я просто использую Head
в C #.