你如何写一个通用的F#委托声明?

时间:2016-01-19 00:24:32

标签: f# c#-to-f#

那么,你如何在f#中编写泛型委托声明?

我希望得到相当于这个c#声明:

public delegate Result<TOutput> Parser<TInput, TValue>(TInput input);

我无法找到有关如何实现这一目标的文档,尽管必须编写通用委托是非常常见的。

任何想法或指示?

1 个答案:

答案 0 :(得分:6)

您可以按如下方式定义通用委托:

type Parser<'TInput, 'TOutput> = delegate of 'TInput -> Result<'TOutput>

在F#中,通用参数在开头用单引号编写(以区别于普通类型),这就是你需要'TInput的原因。

仅仅为了记录,我认为我不需要在F#中定义委托。我猜它们对C#interop仍然有用,但即便如此,我可能只为Func委托定义一个类型别名,或者(当你不打算从C#调用它时,只是一个普通的F#函数) ):

// Alias for a standard .NET delegate
type Parser<'TInput, 'TOutput> = System.Func<'TInput, Result<'TOutput>>

// Alias for a normal F# function
type Parser<'TInput, 'TOutput> = 'TInput -> Result<'TOutput>