我的意思不是作为 Eq 的成员。我的代码:

data Race = Terran | Zerg | Protoss deriving (Eq, Show, Read);

data MU = MU Race Race deriving (Eq, Show);

在这种情况下,我定义了例如 (MU Terran Zerg) 。我想创建一个数据构造函数 TvZ ,它在所有方面都基本相同,因此我可以匹配函数模式:
foo TvZ = ...

而不是必须做
foo (MU Terran Zerg) = ...

如果将其分配给 tvZ = (MU Terran Zerg) 中的变量,则无法执行此操作

我想做的另一件事是制作简短的形式,使类型构造函数 TTerran 相同。

最后一件事,我觉得 medivac 速度提升需要一点点削弱。

最佳答案

您所要求的称为“模式同义词”,并且已被多次提出。目前尚未实现。您可以查看提案 herehere 和其他一些地方(链接由 hammar 提供)。

但是,作为解决方案,这也同样有效:

foo (MU Terran Zerg) = ...
foo (MU Zerg Terran) = foo $ MU Terran Zerg

并且会有效地实现相同的目标,即使它看起来不那么好。

关于haskell - 定义 Haskell 类型构造函数相等?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16007427/

10-10 18:24