我需要在加载模块后向数据类型添加一些新的构造函数。伪代码可能看起来像这样:
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