Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么单位类型是Enum typeclass的成员?_Haskell - Fatal编程技术网

Haskell 为什么单位类型是Enum typeclass的成员?

Haskell 为什么单位类型是Enum typeclass的成员?,haskell,Haskell,说: 枚举成员是按顺序排序的类型-可以枚举它们。Enum typeclass的主要优点是我们可以在列表范围中使用它的类型。它们还定义了继承者和前置者,您可以通过succ和pred函数获得这些继承者和前置者。此类中的类型:、Bool、Char、Ordering、Int、Integer、Float和Double 为什么是这个typeclass的成员?虽然它支持所有必需的功能,但它似乎并不有用,因为succ和pred总是会失败,在列表范围内使用它只会产生它自己。对于这类事情的非官方政策是将其作为一个实

说:

枚举成员是按顺序排序的类型-可以枚举它们。Enum typeclass的主要优点是我们可以在列表范围中使用它的类型。它们还定义了继承者和前置者,您可以通过succ和pred函数获得这些继承者和前置者。此类中的类型:、Bool、Char、Ordering、Int、Integer、Float和Double


为什么是这个typeclass的成员?虽然它支持所有必需的功能,但它似乎并不有用,因为succ和pred总是会失败,在列表范围内使用它只会产生它自己。

对于这类事情的非官方政策是将其作为一个实例,除非它不能遵守法律。这一政策在过去引起了一些意外,元组的可折叠/可遍历实例突然出现在脑海中,但在大多数情况下是积极的。经常会遇到一些您希望在各种类上使用的多态函数,并且很高兴发现它适用于您当前代码中碰巧需要的具体类型,因为您的具体类型具有适当的实例。

我不认为这是策略,不管是官方的还是其他的,我肯定不会同意。否则我们还有实例幺半群Int,其中{mempty=0;mappend=+}。我更愿意说,政策是,“如果有一种守法的、非病态的方法可以做到这一点,那就把它作为一个例子”。“非病理性”位当然有点模糊,但在Enum的情况下,实例必须做的事情是非常明显的。@leftaroundabout感谢您的细微差别;我同意这是政策的一个重要部分。要在可折叠/可遍历点上展开,请考虑此代码:最大值1,0。这看起来很明显应该是1,但实际上是0,因为Foldable for tuples的实例认为第二个元素是它要折叠的对象,如foldMap f u,y=f y。它也是有界的,所以[minBound..maxBound]起作用。