型の紹介 型クラス Int型、Enum型クラス、Bounded型クラス、succ関数の独自実装、Eq型クラス
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT2(型の紹介)、LESSON13(型クラス)、13.8(練習問題)Q13-3の解答を求めてみる。
コード
cycleSucc :: (Bounded a, Enum a, Eq a) => a -> a
cycleSucc n =
if n == maxBound -- このためにEq型クラスが必要
then minBound
else succ n
n1 :: Int
n1 = 1
n2 :: Int
n2 = maxBound
main :: IO ()
main = do
print $ cycleSucc n1
print $ cycleSucc $ cycleSucc n1
print $ succ n1
print $ succ $ succ n1
print $ cycleSucc n2
print $ cycleSucc $ cycleSucc n2
print $ succ n2
入出力結果(Terminal, Zsh)
% runghc sample3.hs
2
3
2
3
-9223372036854775808
-9223372036854775807
sample3.hs: Prelude.Enum.succ{Int}: tried to take `succ' of maxBound
%