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に予め用意されている関数は何というモジュールに入っていますか?