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

时间:2013-01-21 04:43:34

标签: 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

1 个答案:

答案 0 :(得分:10)

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

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