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 に答える