2010-10-06 105 views

回答

11

首先,Scala的情況與Haskell有很大不同,因爲它是面向對象的語言,面向對象設置中的類型推斷有點複雜。

我知道的唯一的OO語言接近全類型推斷是OCaml。 OCaml通過廣泛使用結構分型來實現這一點(let f o = o.foo 42中的o的推斷類型是「具有foo方法的對象,其將int作爲參數」並且推斷的返回類型是「無論o.foo的返回類型是什麼」,這是這裏推斷的唯一有用的類型)。

但是Scala有很多額外的功能(重載,隱式轉換)妨礙了OCaml的方法,並且無法進行全面的全局類型推斷。

+1

是的。特別是超載是Hindley-Milner式推理的一個難題。 – Landei 2010-10-06 10:14:34

6

簡而言之,Haskell使用的類型推斷算法Hindley-Milner在存在子類型時不起作用。

+1

除了簡單修改的​​版本* does *在OCaml中工作,它具有子類型。當然,它是*結構*子類型,而不是斯卡拉的主格子類型。 – 2013-10-29 06:44:16

相關問題