1
我有一個需求,在它的模塊被加載之後,向數據類型添加一些新的構造函數。僞代碼可能看起來像這樣:在聲明後向數據類型添加一個新的構造函數
import MyModule
data MyType = NewConstructor
在上面的例子已經MyType
在MyModule
被前面所定義。有沒有辦法做到這一點?
我有一個需求,在它的模塊被加載之後,向數據類型添加一些新的構造函數。僞代碼可能看起來像這樣:在聲明後向數據類型添加一個新的構造函數
import MyModule
data MyType = NewConstructor
在上面的例子已經MyType
在MyModule
被前面所定義。有沒有辦法做到這一點?
你不能。數據類型已關閉。否則,這是一件好事,你如何預測預定義函數將如何表現?
一些方法可以,這裏有一些我的頭頂部:
myExtendedType = MyType 42
;data MyExtendedType = MyExtendedType; toMyType MyExtendedType = MyType 42
;包裝現有數據類型:
import MyModule as Old
data MyExtendedType = FromOld (MyType Int) | MyExtendedType
foo (FromOld m) = Old.foo m
foo MyExtendedType = undefined
怎麼樣類型的同義詞?我可以使用它們嗎? – ye9ane
類型同義詞提供....一個確切的同義詞,所以你不能擴展現有的構造函數感謝他們。 – Nicolas