【发布时间】:2020-02-26 01:06:48
【问题描述】:
我正在尝试为博弈论制作一个正规形式的博弈求解器,并且我正在尝试使其尽可能通用,以实现良好的实践和我自己的方便。我想使用相同的函数来解决零和游戏和非零和游戏,所以我使用以下数据类型:
data Payoffs = (Num a, Eq a, Ord a) => ZS a
| (Num a, Eq a, Ord a) => NZS (a,a)
但是,这不是正确的语法。有什么方法可以约束a,使其必须满足这些类型约束?
【问题讨论】:
-
你的意思是写
data Payoffs a = ...吗? -
完整的旁注:不要
NZS (a,a)。而是NZS a a。额外的元组构造函数对您没有任何好处(并且正在做坏事:额外分配和间接)。 -
@DanielWagner 我使用元组是因为它在数学上应该是一个元组
-
@n.m.如果我写
data Payoffs a = ...,我还能将Ints 的收益与Fractionals 的收益进行比较吗? -
在数学上,你可能会想到作者在他们手稿的开头添加了一个短句,“当我写语法
(x, y)作为非零和游戏的回报时,我我将其用作一个漂亮的符号,其实际含义是NZS x y。”。然后您可以随意使用NZS a a而不是NZS (a,a)。 (毕竟,我敢打赌你已经隐含地为你的其他构造函数想象了一个类似的句子......或者你正在阅读的数学定义真的在整个地方都包含ZS标签......?)
标签: haskell