Namaran

Code daily. Without assist.

2026-08-27

Increment.hs

main :: IO ()
main = do
  print (succ 5)
  print (succ 'y')
  print (map succ [1, 2, 3])

これは何を出力するでしょうか?

Answer

6'z'[2,3,4] — 1行ずつ。succEnum型クラスのメソッドで、Haskellにおける汎用的な「次の値」を表します。C系言語の++/--のような、変数を書き換える専用構文はHaskellにはありません(値は不変なので、そもそも「変数をインクリメントする」という発想になじみません)。IntでもCharでも同じsuccが使え、ユーザー定義のEnum型でも同様です。ちなみに++というトークンはHaskellにも存在しますが、意味はまったく別物で、リストの連結演算子([1,2] ++ [3,4])です。