1. 導入
1.1. 開発環境
2024年1月現在,開発環境のインストールはGHCupを使います(最新の推奨インストール方法はHaskell公式ページを確認してください).GHCup公式サイトのInstallationページを参考に以下の開発ツール一式をインストールしてください.ただし,ghci
とrunghc
は,ghc
をインストールすると一緒にインストールされます.
-
ghc コンパイラ.The Glasgow Haskell compilerの略.
-
ghci 対話型インタープリタ(REPL)
-
runghc インタープリタ.コンパイルせずにHaskellソースコードを実行できる.
-
-
stack ビルドツール & パッケージ管理ツール
-
cabal 旧ビルドツール.インストールするパッケージによってビルドツールが違うため,stackもcabalもどちらもインストールしておいた方が良い.
-
HLS 言語サーバー(Haskell Language Server).Editorとコンパイラを繋ぎ開発支援を行う.
-
GHCupは
~/.ghcup/bin
以下にインストールされます.インストール後,このディレクトリにパスを通します.これでghcup
をコマンドラインから起動できます. -
GHCupで開発ツール一式のダウンロードを終えたら,以下のコマンドを実行して使用する
ghc
のバージョンをセットします.バージョン番号は適宜ダウンロードしたものに合わせてください.$ ghcup set ghc 9.4.8
-
コマンドラインから
ghc --version
と起動してバージョン番号が表示されればインストール成功です.
1.2. エディタの準備
Haskellの開発をサポートするエディタは色々ありますが,ここではVSCodeを使います.公式ページからダウンロード・インストールしてください.
プログラミング用のエディタのメニューは日本語に設定せず,英語のままで使うことをお勧めします.プログラミングの情報は多くが英語です.英語のメニューに慣れておくと,英語の情報ページやYouTubeの解説動画を参考にするときに苦労しません.また,英語のメニューから対応する日本語には頭の中ですぐに変換できるので,日本語の情報サイトを使う場合も問題になりません.
VSCodeをインストールしたら,左側の縦に並んだアイコンからExtensionsボタンを押して,下の画像の3つのExtensionsをインストールしてください.上の検索フィールドにExtension名を入力すると現れます.
1.3. Hello World
まずはプログラミング言語の学習にお決まりの儀式,"Hello world"を画面に表示させましょう.Haskell学習用にフォルダを作成しVSCodeでそのフォルダを開きます.これがプロジェクトフォルダになります.
プロジェクトフォルダの中にsrc/ch01
フォルダを作成し,以下のhello.hs
ファイルを作成します.初めてVSCodeでHaskellファイルを作成すると,先ほどインストールしたExtensionsが必要な開発ツールをインストールするか聞いてきますので,全てYesと答えます.
-- src/ch01/hello.hs (1)
main = do (2)
print "Hello World!" (3)
1 | -- 以降はコメントとしてコンパイラから無視されます. |
2 | プログラムが起動すると最初にmain 関数が実行されます. |
3 | 画面に出力します. |
本書では1行目のコメント行にファイル名を記述することにします.このファイルをghc
でコンパイルすると実行ファイルが生成されます.VSCodeのTerminalメニューから「New Terminal」を選び,エディタ下部に開かれた「Terminal」タブのシェルプロンプトに以下を入力します.ただし行頭の$
記号はシェルプロンプトなので入力しません.シェルの種類によってはプロンプトが%
の場合もあります.
$ ghc src/ch01/hello.hs
[1 of 2] Compiling Main ( src/ch01/hello.hs, src/ch01/hello.o )
[2 of 2] Linking src/ch01/hello
ld: warning: ignoring duplicate libraries: '-lm'
src/ch01
ディレクトリに生成されたhello
が実行ファイルです../src/ch01/hello
で起動します.
$ ./src/ch01/hello
"Hello World!"
src/ch01
ディレクトリには実行ファイル以外にhello.hi
とhello.o
ファイルも生成されます.これらはコンパイルの過程で作成される中間ファイルです.コンパイル後は削除して構いません.
1.4. ソースコード内のコメント記述
ソースコード内で--
を書くと,それ以降行末までコンパイラから無視されます.複数行のコメントは以下のように{-
と-}
で囲みます.
{-
ここはコメントとして無視されます
複数行のコメントが書けます
-}
main = do -- これ以降もコメントとして無視されます
print "Hello World!"
1.5. VSCodeからコードを実行する
ghc
をインストールした際に一緒にインストールされるrunghc
はインタプリタでコードをコンパイルせずに実行することができます.これをVSCodeから呼び出すことで,現在編集中のソースファイルをコンパイルせずに実行することができます.Section 1.2でインストールしたCode Runner extensionを使います.
先ほどのhello.hs
ファイルをVSCodeで開くと,右上に三角形のRunボタンが表示されます.これを押すとOUTPUTペインに以下のような実行結果が表示されます.
[Running] runghc "/Users/shito/Documents/git-repositories/books/book-ProgrammingInHaskell-Hutton/src/ch01/hello.hs" "Hello World!" [Done] exited with code=0 in 0.224 seconds
ここでもし/bin/sh
がrunghc
を認識しない場合は,~/.profile
に~/.ghcup/bin
へのパスを通す設定を行い,VSCodeを再起動してください.それでもうまくいかない場合は,下記のページを参考に自分の環境に合わせて設定してください.
1.6. 対話型インタプリタ
数学では\(x\)の関数\(f\)は\(f(x)\)と記述しますが,Haskellではf x
と書きます.括弧がないのが特徴です.2変数関数\(g(x, y)\)ならHaskellではg x y
と書きます.
Haskellに予め用意されている関数はPreludeと呼ばれるモジュールに入っています.括弧を付けない関数呼び出しに慣れるために,Prelude内の関数をいくつか呼び出してみましょう.ちょっとしたコードを試すには対話型インタープリタを使います.ターミナルでghci
を起動して,ghci>
プロンプトに以下のコードを入力します.
$ ghci
GHCi, version 9.4.8: https://www.haskell.org/ghc/ :? for help
ghci> take 3 "abcdef" (1)
"abc"
ghci> drop 3 "abcdef" (2)
"def"
1 | take が関数名.3 と"abcdef" が関数に渡される引数.最初の3文字を取り出した結果を返す. |
2 | drop が関数名.3 と"abcdef" が関数に渡される引数.最初の3文字を取り除いた結果を返す. |
先ほどのHello Worldのコードで出てきたprint
関数もやはり括弧を付けずに呼び出しました.
ghci> print "Hello World!"
"Hello World!"
対話型インタプリタを終了するにはプロンプトに:quit
か:q
をタイプします.
ghci> :q
Leaving GHCi.
1.7. 本章のまとめ
関数については今後詳しく学びます.今回学んだことをまとめてみましょう.
-
コンパイラ
ghc
,インタプリタrunghc
,対話型インタプリタghci
を使ってコードを動かしました. -
ソースコードにコメントを記す方法を学びました.
-
VSCodeの編集画面から
runghc
を起動してコードを実行させました. -
Haskell特有の括弧をつけない関数呼び出しについて学びました.
-
Preludeというモジュールに標準で使える関数があることを学びました.
1.8. 練習問題
-
対話型インタプリタの起動方法は?
-
VSCodeで開いているファイルを実行する方法は?
-
コンパイラの起動方法は?
-
ソースコード内にコメントを書く方法を2つ挙げてください.
-
開発ツール一式のインストールとバージョン管理を行うプログラムの名前は?
-
Haskellに予め用意されている関数は何というモジュールに入っていますか?