声明后将新构造函数添加到数据类型

时间:2013-07-31 09:15:16

标签: haskell constructor algebraic-data-types

我需要在加载模块后为数据类型添加一些新的构造函数。伪代码可能如下所示:

import MyModule

data MyType = NewConstructor

在上面的示例中MyType之前已在MyModule中定义。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

你做不到。数据类型已关闭。否则,这是一件好事,你如何预测预先定义的函数将如何表现?

存在几种解决方法,这里有一些不在我的脑海中:

  1. 使用函数作为构造函数。例如myExtendedType = MyType 42;
  2. 使用您自己的类型和映射功能。例如data MyExtendedType = MyExtendedType; toMyType MyExtendedType = MyType 42;
  3. 包装现有数据类型:

    import MyModule as Old
    
    data MyExtendedType = FromOld (MyType Int) | MyExtendedType
    
    foo (FromOld m) = Old.foo m
    foo MyExtendedType = undefined