在閱讀文章"Data types a la carte" by Wouter Swierstra,我已經得到了被困在翻譯如下Haskell代碼爲斯卡拉:Parametrised數據類型
data Expr f = In (f (Expr f))
Expr
是用於在特定的方式代表算術表達式中的數據類型表達式可以寫成如下:
data Val e = Val Int
type IntExpr = Expr Val
data Add e = Add e e
type AddExpr = Expr Add
我的問題是在實施f
(這可能被認爲是在簽名構造的)在斯卡拉。
P.S.定義兩個簽名的副產物,你以後可以結合數據類型,讓Expr (Val :+: Add)
類型的表達式:
data (f :+: g) e = Inl (f e) | Inr (g e)
addExample :: Expr (Val :+: Add)
addExample = In (Inr (Add (In (Inl (Val 118))) (In (Inl (Val 1219)))))
* n.b. * - [tag:adt]是關於「Android開發工具」,而不是代數數據類型,無論如何,應用於數據類型的首字母縮寫ADT通常表示* abstract *,而不是* algebraic *。 –
有兩個問題阻礙了直接實現這一點:1)通用量化。 2)高階統一。 – Apocalisp