2

我发现

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'

因此,这意味着 () 是 Enum 的一个实例,并且应该已经实现了该succ功能。但是,当我尝试时succ (),我得到了*** Exception: Prelude.Enum.().succ: bad argument

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

4

1 回答 1

11

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

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

于 2013-01-21T04:54:59.213 回答