1
假設我們有一個模塊A和一個模塊B,其中聲明瞭A和B類型。 在模塊中超,我們想說的是,型超是A或B像下面的代碼:使用導入模塊中的類型創建數據類型
-- module A
data A = A String
-- module B
data B = B Int
-- module Super
data Super = A.A
| B.B
但我們不能在數據構造函數中使用完全合格的數據類型,這並不工作(錯誤是:「裝訂位置合格的名稱」),如果我們不把完全合格的名稱像下面,A型和B不是從模塊A和B,其
-- module Super
data Super = A
| B
至於我的解決辦法是做這樣的
-- module Super
data Super = A A.A
| B B.B
有沒有更好的方法來實現這一目標?我不知道如果我要使用類型的類
PS: 我的目標是有型超級
let mySuperList = [ B, A ] :: [Super]
我不能這樣做,更多的類型會來 –
@Erèbe然後定義你自己的類型'data Union = A A.A | B B.B | C C.C | D D.D | ......並根據需要進行擴展。這比嵌套'Eithers'更有用,即'或者A(B(或者C D))'。您可能還想查看[數據類型點菜](http://www.cs.ru.nl/~W.Swierstra/Publications/DataTypesALaCarte.pdf)論文,其中介紹瞭如何使用N種類型解決此問題,但請記住,這種方法存在一些重要的理論和計算開銷。 – bheklilr
我會閱讀這篇論文。 Merci bienàtoi –