我需要在加载模块后为数据类型添加一些新的构造函数。伪代码可能如下所示:
import MyModule
data MyType = NewConstructor
在上面的示例中MyType
之前已在MyModule
中定义。有没有办法做到这一点?
答案 0 :(得分:4)
你做不到。数据类型已关闭。否则,这是一件好事,你如何预测预先定义的函数将如何表现?
存在几种解决方法,这里有一些不在我的脑海中:
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