2015-07-01 63 views
3

從閱讀lambda cube和維基百科條目這thread,當適用於哈斯克爾,我的理解是,哈斯克爾 - 多態性和值取決於類型

  1. 家人條款索引項的 - 典型的功能從價值到價值
  2. 按類型索引的術語族 - ??
  3. 家庭由類型索引類型 - 參數多態型構造,類型家庭
  4. 家庭通過索引項類型 - PI類型(其中你假在哈斯克爾單類型),西格瑪類型等...

請糾正我,如果我錯了上面列舉的例子。引用該維基百科文章:

  • 術語取決於類型或多態性。系統F,又名二階拉姆達微積分(在圖中寫爲λ2),是通過僅施加此屬性而獲得的。

我不知道Haskell如何適合這個(2)從上面。 Haskell有條款和類型,以及類型擦除之間有很強的區分,所以你不必思考的東西在OOP如typeof(a)b.GetType(),然後繼續返回基於在運行時類型信息的一些價值。

這樣我就可以在Haskell想到的唯一的事情有關(2)也許在說memptyData.Monoid,其中的值取決於實例類型

  • 返回類型多態性
  • 數據家庭,你在LHS類型和價值構造函數在RHS

這是正確的嗎?雖然我覺得我並沒有使所有的連接...

這將是正確的說,特設多態滿足(2),而參數多態性滿足(3)?但是,特設與參數如何與類型與數據系列的RHS差異相關?

最後一件事,怎麼會總結類型的值,如

當他們缺乏類型的上下文適應這個圖片

?我的猜測是這是(2)的一個例子?

回答

4

條款通過類型

在拉姆達立方體這是參數多態性索引。

在F系統,多態方面看起來像採取類型作爲參數和返回值方面的功能。

id : ∀ a. a -> a 
id = Λa . λx : a . x -- Λ binds type args, λ binds term args 

他們可以明確他們申請類型實例化:

boolId : Bool -> Bool 
boolId = id Bool 

在Haskell中,面向用戶的語言沒有顯式類型的應用程序和抽象,因爲類型推斷可以在填大部分(但不是全部)案件的細節。相比之下,GHC核心(GHC Haskell的中間語言)非常類似於系統F,並且具有類型應用程序。

類型擦除與我們是否可以按類型對術語進行索引正交。它發生在Haskell類型可以從運行時刪除,但我們可以想象其他語言沒有統一大小的運行時對象,因此他們需要保持類型(或大小信息)。

類型由類型

在拉姆達立方體意義上,這是指具有從類型和類型構造函數來類型和類型構造函數索引。

Haskell並不完全具有類似的功能。家庭型最接近,但他們都weaker and stronger.

類型類和拉姆達立方體

類型類是未在lambda立方體模型怪獸。在Haskell中,他們解析函數和字典傳遞,所以它們甚至不會出現在GHC Core中。它們可以被看作是對程序的某種預處理,它依賴於實例自我強加的唯一性來確定性地填充細節。

+0

感謝您對Conor答案的解釋和有用的鏈接。所以我認爲,lambda立方體不過是對基礎lambda微積分的不同擴展的補充。還有其他擴展,如Fc [類型系列有點類似Fω但不完全],或OO中的子類型多態性。 – gspindles

+0

簡而言之,lambda多維數據集總結了是否允許從X到Y的函數,其中X和Y可以是「類型」或「術語」。僅供參考,[這裏是](http://augustss.blogspot.dk/2007/10/simpler-easier-in-recent-paper-simply.html)lambda多維數據集的簡潔教程實現,您可以輕鬆地在允許/禁止抽象的立方體的點。 –

+0

謝謝!當我回家時我會讀它。所以lambda立方體實際上在類別層和上面沒有任何事情要做,儘管這可能不是必需的。 – gspindles