1

对于我的任务,我们必须编写一个如下所示的原始函数:

我的问题是 Prim Eq、Prim Less、Prim Great 应该能够接受任何类型的参数,例如字符串、数字,尽管它的返回类型始终是布尔值......所以我不知道如何指定类型 a 和 b。

如果您知道如何处理此问题,请告诉我。我真的很感谢你的帮助。非常感谢你。

4

2 回答 2

4
prim Less [Number a, Number b] = Bool (a < b)
prim Less [String a, String b] = Bool (a < b)
prim Great [Number a, Number b] = Bool (a > b)
prim Great [String a, String b] = Bool (a > b)

a并且b不是类型;他们是价值观。我不确定你想在这里指定什么。

于 2013-02-01T14:47:39.810 回答
0

您要查看的是GADTs。但是,您可能无法拥有您的prim功能,但如果您可以向构造函数添加类型签名,您可以获得更多的类型安全性,例如Eq :: Value a -> Value a -> Value BoolGADT。

于 2013-02-01T14:53:42.410 回答