Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 在声明后向数据类型添加新构造函数_Haskell_Constructor_Algebraic Data Types - Fatal编程技术网

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

类型同义词呢?我可以使用它们吗?类型同义词提供。。。。一个完全相同的同义词,所以你不能因为它们而扩展现有的构造函数。那么类型同义词呢?我可以使用它们吗?类型同义词提供。。。。一个完全相同的同义词,因此由于它们,您无法扩展现有构造函数。