2016年9月17日に、 Haskell Day 2016 が開催されます。このエントリでは午前中のHaskell チュートリアルの参加者向けに、チュートリアルの概要と、参加するために必要な準備について説明します。なお、チュートリアルはTurtle.Tutorialに沿って進めますので、本エントリはTurtle.Tutorialを始めるための日本語資料としても利用できるでしょう。
【追記】本編が開催されました。【/追記】
チュートリアルの概要
他言語の経験者を対象に、Haskellでコマンドラインツールを作る演習を開催します。本チュートリアルは以下の内容を含みます。
- Haskellの実行環境の作り方 (本エントリ)
- Haskellでスクリプトを作成するのに便利なライブラリTurtleの紹介
- Turtleを利用した、簡単なコマンドラインツールの作成
以下の内容は 含みません 。
- パターンマッチ、代数的データ型、再帰など、関数型言語的な側面の詳説
- 型付きラムダ計算、ファンクタ・モナドなど、Haskellの理論的背景
チュートリアルは、概要を説明した後に実際に手を動かしてもらうという手順で進めます。詰まったときには手を挙げてもらえれば、チューターか講師が疑問を解決するお手伝いをします。
なお、チュートリアル開始前に、Haskellの経験者の中から ボランティアでチューターをしていただける方を募集する予定 ですので、普段からHaskellを利用される方はお手伝いしていただけると幸いです。
チュートリアルの持ち物
演習時間をとりますので、PCを持ってこないと暇です。PCの貸出は行ないません。
- 本エントリに従ってHaskellとTurtleの実行環境が用意されたPC。
チュートリアルの準備
チュートリアルの参加者は、以下の手順に従ってStackとGHC、turtleパッケージをインストールして下さい。基本的にTurtle.Tutorialにも書かれている内容ですので、英語に抵抗がない方は本家も一緒に参照するといいでしょう。
stackのインストール
Stack はHaskellのビルドツールであり、HaskellのコンパイラであるGHCのインストールまで含めてHaskellを利用した開発を全般的にサポートしてくれるものです。 インストール手順に従い、Stackを各自のPCへインストールして下さい。
-
windowsはインストーラーから (
Windows 64-bit Installer
などのリンク) - Linux、UNIX系OSは
curl -sSL https://get.haskellstack.org/ | sh
コマンドで - MacはhomebrewでもO.K.
brew install haskell-stack
Stackが管理するパッケージデータベースは、プロジェクトごとに分かれています。本エントリではglobal projectを利用する想定ですので、以降、stack
コマンドを実行するときは必ず 他のHaskellプロジェクトのディレクトリ内で実行しない ように気をつけて下さい。
また、 元々stackがインストールされていた人は、global project で使われる resolverが古すぎないか確認 して下さい。本チュートリアルでは lts-6.x
を使ってます。
使われるresolverは stack.yaml
に書かれています。 stack path --config-location
コマンドで stack.yaml
の場所を確認し、ファイル内のresolver:
の項目を確認して下さい。lts-6.x
以外が指定されている場合は、 stack.yaml
を編集して下さい。本エントリ執筆時点では、lts-6.14
を指定するのが一番いいでしょう。
GHCのインストール
GHCはHaskellのコンパイラの1つです。Stackは指定した resolver
に対応したGHCをインストールしてくれます。 lts-6.x
では ghc-7.10.3
がインストールされます。(ghc-8.x
向けのltsは、本エントリの執筆時点ではまだ出ていません)
-
stack setup
を実行し、ghcをインストール
turtleのインストール
Stackを使うと resolverに含まれているパッケージを簡単にインストールすることができます。チュートリアルではturtle
パッケージを利用しますので、事前にこれをインストールしておいて下さい。
-
stack build turtle
を実行し、 turtle パッケージをインストール
動作確認その1
REPLを利用し、環境が整ったかを確認します。次のコマンドを実行し、出力を確認して下さい。REPLからpwd
関数が呼び出せれば問題ありません。
$ stack repl
Prelude> import Turtle
Prelude Turtle> pwd
FilePath "/tmp"
Prelude Turtle> :q
Leaving GHCi.
$
動作確認その2
stackを使うと、Haskellでスクリプト(実際は単に毎回コンパイルされるだけですが)を書くことができます。次の内容で pwd.hs
という名前のファイルを作って下さい。
#!/usr/bin/env stack
-- stack --install-ghc runghc --package turtle
import Turtle
main = pwd >>= print
作成したスクリプトにパーミッションを与え、実行します。REPLの時と同様にpwd
の結果が出力できていれば問題ありません。
$ chmod a+x pwd.hs
$ ./pwd.hs
FilePath "C:\\msys64\\tmp"
まとめ
HaskellでTurtle.Tutorialを実施するための環境構築方法を説明しました。チュートリアルではHaskellを用いたコマンドラインツールの作成を行います。副作用の塊であるコマンドラインツールとHaskellは相性が良くないと思われる方もいるかもしれませんが、まったくそんなことはありません。超強力な静的型チェックと静的言語ならではの実行効率、さらにHackage が提供する豊富なライブラリによる実用性を兼ね備えているのがHaskellの本当の魅力です。興味のある方はぜひ、Haskell Day 2016 のチュートリアルにお越しください。
あと、当日、チューターをしてくださる方の参加もお待ちしています!