2014-02-18 27 views
3

我努力端口一個C#應用F#和我有這樣的接口:通用函數簽名

public interface ISerializer 
{ 
    string ContentType { get; } 
    string Serialize(object value); 
    T Deserialize<T>(string value); 
} 

所以我想定義一個類型,像這樣:

type Serializer = {ContentType: string; Serialize: Object -> string; Deserialize<'T>: string -> 'T} 

但我不能。這裏有什麼功能?

回答

3

您可以定義在F#同一界面是這樣的:

type ISerializer = 
    abstract ContentType : string 
    abstract Serialize : obj -> string 
    abstract Deserialize<'a> : string -> 'a 

有沒有辦法來獲得相同的「內部」多態性與天然功能性的數據類型,如記錄,所以你必須使用OO結構體。

如果你真的想用一個記錄,你可以定義一個包裝器Deserialize,並將該記錄中:

type IDeserializer = 
    abstract Deserialize<'a> : string -> 'a 

type Serializer = 
    { 
     ContentType : string 
     Serialize : obj -> string 
     Deserializer : IDeserializer 
    } 

,但我不認爲它是真正值得的。