Haskell 在声明后向数据类型添加新构造函数
我需要在数据类型的模块加载后向其添加一些新的构造函数。伪代码可能如下所示:Haskell 在声明后向数据类型添加新构造函数,haskell,constructor,algebraic-data-types,Haskell,Constructor,Algebraic Data Types,我需要在数据类型的模块加载后向其添加一些新的构造函数。伪代码可能如下所示: import MyModule data MyType = NewConstructor 在上面的示例中,MyType先前已在MyModule中定义。有办法吗?你不能。数据类型已关闭。这是一件好事,否则,你们怎么能预测先前定义的函数的行为呢 存在几种变通方法,下面是一些我不知道的方法: 将函数用作构造函数。e、 g.myExtendedType=MyType 42; 使用您自己的类型和映射函数。e、 g.数据MyEx
import MyModule
data MyType = NewConstructor
在上面的示例中,MyType先前已在MyModule中定义。有办法吗?你不能。数据类型已关闭。这是一件好事,否则,你们怎么能预测先前定义的函数的行为呢 存在几种变通方法,下面是一些我不知道的方法: 将函数用作构造函数。e、 g.myExtendedType=MyType 42; 使用您自己的类型和映射函数。e、 g.数据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
你不能。数据类型已关闭。这是一件好事,否则,你们怎么能预测先前定义的函数的行为呢 存在几种变通方法,下面是一些我不知道的方法: 将函数用作构造函数。e、 g.myExtendedType=MyType 42; 使用您自己的类型和映射函数。e、 g.数据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
类型同义词呢?我可以使用它们吗?类型同义词提供。。。。一个完全相同的同义词,所以你不能因为它们而扩展现有的构造函数。那么类型同义词呢?我可以使用它们吗?类型同义词提供。。。。一个完全相同的同义词,因此由于它们,您无法扩展现有构造函数。