exception - 为什么Haskell中的()是Enum类型却没有实现succ函数

标签 exception haskell enums ghc typeclass

我发现

Prelude> :i ()
data () = ()    -- Defined in `GHC.Tuple'
instance Bounded () -- Defined in `GHC.Enum'
instance Enum () -- Defined in `GHC.Enum'
instance Eq () -- Defined in `GHC.Classes'
instance Ord () -- Defined in `GHC.Classes'
instance Read () -- Defined in `GHC.Read'
instance Show () -- Defined in `GHC.Show'

那么,mean()是Enum的一个实例,应该实现了succ函数。然而,当我尝试 succ () 时,我得到了 *** Exception: Prelude.Enum.().succ: bad argument

我搜索了 GHC.Tuple 的源代码,其中应该定义 () 的类型但是 GHC.Tuple

最佳答案

succ 函数只为有后继的参数定义。

Prelude> succ False
True
Prelude> succ True
*** Exception: Prelude.Enum.Bool.succ: bad argument

Prelude> succ 0
1
Prelude> succ 1
2
Prelude> succ ((2^63 - 1) :: Int)
*** Exception: Prelude.Enum.succ{Int}: tried to take `succ' of maxBound

Prelude> succ ()
*** Exception: Prelude.Enum.().succ: bad argument

所以答案是:函数已实现,它总是(正确地)返回一个错误。

关于exception - 为什么Haskell中的()是Enum类型却没有实现succ函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14432687/

相关文章:

java - 读取 Excel 文档时出现问题(Java 代码)

java - java.lang.Error 被抛出到主线程之外是典型的情况吗?

java - SpringMVC 处理剩余 Controller 中的错误

C# 如何使用响应状态代码创建 WebException

haskell - 使用 Haskell 在 dfs 中处理后继

haskell - 在 Ubuntu 12.04 上勇敢面对阴谋 hell

c++ - 在 Objective c 中从 NSNotification 中的 Userinfo 转换 NSEnum 失败

haskell - 如何保存

c++ - 如何将类链接到枚举?

c - C 中的枚举