2016-01-19 52 views
3

那麼,你如何在f#中編寫泛型委託聲明呢?你如何寫一個通用的F#委託聲明?

我想這個C#的聲明等價:

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

我一直沒能找到關於如何實現這一提議的文件,儘管這是一個很常見的寫泛型委託。

任何想法或指針?

回答

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> 
+0

'我不認爲我需要在F#中定義一個委託。我也不。 –

+0

我確實需要它爲c#interop :) – linkerro