2013-07-31 37 views
1

我有一個需求,在它的模塊被加載之後,向數據類型添加一些新的構造函數。僞代碼可能看起來像這樣:在聲明後向數據類型添加一個新的構造函數

import MyModule 

data MyType = NewConstructor 

在上面的例子已經MyTypeMyModule被前面所定義。有沒有辦法做到這一點?

回答

4

你不能。數據類型已關閉。否則,這是一件好事,你如何預測預定義函數將如何表現?

一些方法可以,這裏有一些我的頭頂部:

  1. 使用函數作爲一個構造函數。例如myExtendedType = MyType 42;
  2. 使用您自己的類型和映射函數。例如data MyExtendedType = MyExtendedType; toMyType MyExtendedType = MyType 42;
  3. 包裝現有數據類型:

    import MyModule as Old 
    
    data MyExtendedType = FromOld (MyType Int) | MyExtendedType 
    
    foo (FromOld m) = Old.foo m 
    foo MyExtendedType = undefined 
    
+0

怎麼樣類型的同義詞?我可以使用它們嗎? – ye9ane

+1

類型同義詞提供....一個確切的同義詞,所以你不能擴展現有的構造函數感謝他們。 – Nicolas

相關問題