Haskell とはどんな言語か
Haskell は「純粋関数型プログラミング言語」の代表格です。Java や Python が「手順を順番に書く」命令型の言語だとすれば、Haskell は「値の変換を関数の組み合わせで表現する」言語です。考え方が大きく異なるぶん、学ぶことで他の言語でのプログラミングにも良い影響があります。
最初のプログラム
処理系は GHC が標準です。対話環境の GHCi を使うと1行ずつ試せます。
main :: IO ()
main = putStrLn "Hello, Haskell!"
main :: IO () は「main は入出力を行うアクションである」という型の宣言です。
関数がすべての中心
Haskell では関数の定義がとてもシンプルです。数学の関数定義とほぼ同じ見た目になります。
double :: Int -> Int
double x = x * 2
add :: Int -> Int -> Int
add x y = x + y
Haskell の3つの特徴
- 純粋性:関数は同じ入力に対して必ず同じ出力を返し、外部の状態を変更しない
- 遅延評価:値は本当に必要になるまで計算されない。無限リストさえ扱える
- 強力な型推論:型を書かなくてもコンパイラが推論してくれる(それでも型を書くのが良い習慣)
-- 無限リストから最初の5つの偶数を取り出す
takeFiveEvens :: [Int]
takeFiveEvens = take 5 (filter even [1..])
「無限のリストを作ってから絞り込む」という発想は、遅延評価があるからこそ可能です。
学習のすすめ方
1. GHCup で GHC と GHCi をインストールする 2. GHCi で式を1つずつ評価して感覚をつかむ 3. リスト操作(map、filter、fold)を徹底的に練習する 4. 型クラス(Functor、Monad)は焦らず後回しでよい
Haskell は最初の壁が高い言語ですが、「小さな関数を組み合わせて大きな処理を作る」感覚が身につくと、プログラミングの見え方が変わります。急がず楽しんでください。