はじめに

Haskellは、強い静的型付けを持つ純粋関数型プログラミング言語です。

インストール

Haskellの環境は、Haskell PlatformまたはHaskell Stackを使って導入します。

Haskell Platform

Haskell Platformをインストールすると、Haskellの処理系(GHC)や周辺ツールを一括で導入することができます。Ubuntuでは、以下のコマンドでHaskell Platformを導入できます。

$ sudo apt-get install haskell-platform

ただし、この方法で入るHaskell処理系(GHC)はやや古いので、最新のHaskellを使いたい場合は後述するHaskell Stackを導入しましょう。

Haskell Stackのインストール

Haskell Stackのインストール手順は次のようになります:

  1. apt を使って haskell-stack をインストールする。これによってやや古い stack コマンドが /usr/bin/stack にインストールされる。
  2. stack upgrade を実行する。これによって最新版の stack/home/<user>/.local/bin/stack にインストールされる。(<user> はユーザー名)
  3. .bashrc.bash_profile を編集し、 export PATH=$HOME/.local/bin:$PATH という行を追加する。
  4. source .bashrc なり source .bash_profile を実行し、 $PATH の設定を反映させる。
  5. stack コマンドで最新の stack が起動することを確認する。

コマンド列で書くと次のようになります:

$ sudo apt install haskell-stack
$ which stack
/usr/bin/stack
$ export https_proxy=http://cache.ks.prv:8080
$ stack upgrade
Current Stack version: 1.5.1, available download version: 1.9.1
...

WARNING: Installation path /home/<user>/.local/bin not found on the PATH environment variable
New stack executable available at /home/<user>/.local/bin/stack
$ nano .bashrc
(最後の方に export PATH=$HOME/.local/bin:$PATH を追加する)
$ source .bashrc
$ which stack
/home/<user>/.local/bin/stack
$ stack --version
Version 1.9.1, Git revesion ...

(執筆時点で、aptで入るstackのバージョンは1.5.1, 最新のstackのバージョンは1.9.1でした。)

この状態では、Haskellの処理系であるGHCはまだインストールされていません。 本来のstackの使い方としては、プロジェクトごとにGHCのバージョンを指定し、プロジェクトで必要なGHCをインストールします。 ですが、プロジェクトを作らずに最新のGHCを適当にインストールして使うこともできます (global project)。

$ stack setup
Writing implicit global project config file to: /home/<user>/.stack/global-project/stack.yaml
Note: You can change the snapshot via the resolver field there.
Using latest snapshot resolver: lts-12.20
Downloaded lts-12.20 build plan.
Preparing to install GHC to an isolated location.
This will not interfere with any system-level installation.
Downloaded ghc-8.4.4.
Installed GHC.
...

執筆時点では、GHC 8.4.4がインストールされました。

Haskell Platformでは ghcghci, runghc という名前でGHCのコマンドが使えますが、Haskell Stackでは stack ghcstack ghci, stack runghc という風に、 stack を冠してGHCのコマンドを使います(stack ghci の別名として stack repl を使うこともできます)。

以下、解説記事での各コマンドは、 stack を冠したコマンド名に適宜読み替えてください。

本編

ここのページは自己完結的な入門には程遠いので、他のWebサイトや書籍なども適宜参照することをお勧めします。

おまけ

  • Haskellと圏
    • Haskellのどの辺で圏論の概念が登場するのか、そしてどこが圏論から乖離しているのかをざっくり解説します。
    • 圏論を知らなくてもHaskellは使えますし、圏論を知っているからといって良いHaskellプログラムが書けるとも限らないので、あくまで「おまけ」です。
  • Haskellで競技プログラミング
    • AtCoder等の問題を解くのに必須な、「標準入力から読み取る」処理などを解説します。

この資料を読んで真面目にHaskellを学びたいと思った人へ

公式サイトのDocumentationに、Haskellの様々な入門書、ドキュメントが紹介されています。ただし、これらの中にはプログラミング経験を前提とするものが多いので注意してください。

いくつかの本には日本語訳が存在します。

最近のHaskell事情(例:Haskell Stackの登場)に対応した日本語の書籍も出ています:

文責:TA荒田