2012-03-23 55 views
3

在fsyacc基於項目,我有這樣一行:獲得FS0035 =>結構已過時

type 'a cucomment = string 

這是完全錯誤的描述我越來越:

CALast.fs(117 ,9):錯誤FS0035:此構造已棄用:此 類型縮寫具有一個或多個聲明的類型參數,其中不會出現 的縮寫類型。類型縮寫必須使用所有正在縮寫類型中聲明的類型參數 。考慮 移除一個或多個類型參數,或者使用包含基礎類型的具體類型 定義,例如'輸入C <'>> C的 ...'。

任何想法如何解決這個問題?

+0

僅供訪問此內容的人以及關於語法的疑問,這是更常見的'類型cucomment <'a> = string'的替代語法。 – Abel 2016-12-23 18:52:41

回答

2

F#不再允許在不聲明新類型的情況下將泛型類型參數添加到類型的類型別名。如果你想定義一個包裝其他類型的泛型類型,你必須使用一些構造函數。例如,可以使用單情況下識別聯合:

type 'a Cucomment = CC of string 

不幸的是,這意味着你就必須改變這種使用類型使用模式匹配解開的值的所有的代碼或通過添加Value構件向類型。

允許泛型類型別名的唯一情況是當您聲明帶有度量單位的類型的版本時,該類型需要特殊屬性。然而,這可能不會爲你工作(因爲單位的行爲完全不同):

[<MeasureAnnotatedAbbreviation>] 
type 'a Cucomment = string 

如果這是由fsyacc產生了一些代碼,那麼這就是在fsyacc我一個錯誤,應該是固定的(認爲這是相當近期的變化)。在這種情況下,請將其報告給fsbugs,地址爲microsoft,點com