2010-01-27 81 views
4
返回值和值的限制

基本上,我想有一個函數返回一個多態函數,有些事情是這樣的:多態函數作爲SML

樂趣富()= FN X => X

所以foo的函數以類型單位的值,並返回一個多態同一性功能 和編譯器高興的是,它給了我:

VAL富= FN:單位 - >「A - >」一個

但一旦我真的調用foo函數,返回值是不是我所期待

VAL IT = FN:.X1 - > .X2

,因爲值的限制,它說,任何幫助的不能一概而論???在此先感謝

回答

4

由於技術原因,您不允許概括(即使多態)函數調用的結果。調用的結果必須具有單態類型。如果不是這種情況下,你可以通過下面的髒招顛覆式系統:

  1. 呼叫ref []並取回型forall 'a . 'a list ref
  2. 插入一個字符串列表。
  3. 刪除功能

,並有你:你現在正在執行任意的字符串作爲密碼的內容。不好。

通過堅持ref []返回的值是單形的,您可以確保它可以用作字符串列表或函數列表,但不能同時用作兩者。所以這是我們爲類型安全付出的代價的一部分。