那么,你如何在f#中编写泛型委托声明?
我希望得到相当于这个c#声明:
public delegate Result<TOutput> Parser<TInput, TValue>(TInput input);
我无法找到有关如何实现这一目标的文档,尽管必须编写通用委托是非常常见的。
任何想法或指示?
答案 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>