我的意思不是作为 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)
中的变量,则无法执行此操作我想做的另一件事是制作简短的形式,使类型构造函数
T
和 Terran
相同。最后一件事,我觉得 medivac 速度提升需要一点点削弱。
最佳答案
您所要求的称为“模式同义词”,并且已被多次提出。目前尚未实现。您可以查看提案 here 、 here 和其他一些地方(链接由 hammar 提供)。
但是,作为解决方案,这也同样有效:
foo (MU Terran Zerg) = ...
foo (MU Zerg Terran) = foo $ MU Terran Zerg
并且会有效地实现相同的目标,即使它看起来不那么好。
关于haskell - 定义 Haskell 类型构造函数相等?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16007427/