3

我想生成一个静态方法这个签名A -> B -> C

但我只能生成A * B -> C

ProvidedMethod(name, [ ProvidedParameter("A", aType); ProvidedParameter("B", bType) ], cType, IsStaticMethod = true)

我不能手动进行柯里化,因为函数类型在类型提供程序中不能正常工作,只能委托类型。有没有其他我不知道的方法可以做到这一点,或者这根本不支持?

4

1 回答 1

1

我怀疑您不能简单地使用 ProvidedMethod 进行柯里化。但是,您可以让您的方法返回一个包装参数应用程序的函数。

public Func<A, Func<B, C>> Curry<A, B, C>(Func<A, B, C> func)
{
   return a1 => a2 => func(a1, a2);
}

上面在 C# 中给出的示例以更明确地显示类型,在类型提供程序中,这将类似于以下内容。

let retType = typeof<('a -> ('b -> 'c)>
let ftype = typeof<('a -> 'b -> 'c>
let method = ProvidedMethod(name, [ProvidedParameter("Func", ftype)], retType)

我目前手头没有 F# 编译器(我在 iPad 上),但希望这是朝着正确方向的推动。

于 2013-04-29T20:48:10.463 回答