処理系の導入と対話環境
「Haskell入門ハンズオン!」事前資料の一覧
処理系の導入
はじめに
パッケージを導入する仕組みとして、Cabalがある。そして、パッケージをアップロードする場所としてHackageがある。それだけがあった。しかし、Hackageにアップされるパッケージが増えていき、依存関係も複雑化し、それぞれのパッケージのバージョンも、さまざまにアップデートされていった。結果として、「依存性地獄」が生じた。そこに、すくいの神として、StackとStackageとがあらわれた。
トラブルなく、さまざまなパッケージを使っていくうえでは、Haskellの処理系であるGHCを直接、導入するのではなく、まずStackを導入し、それを利用してGHCを導入するのが、現在では最適解かと思われる。
Stackのインストール
つぎのアドレスに、導入のしかたが書かれている。
以下に概要を説明する。
Windows 10
つぎのアドレスからインストーラを、ダウンロードする。
ダウンロードした.exeファイルを実行し、ウィザードにしたがって、導入する。Stackの導入ができたら、つぎのようにターミナルを立ち上げる。
[スタートボタン]右クリック > 「コマンドプロンプト(管理者)」
「GHCの導入」に進み、コマンドを打ち込もう。
(注) コメントにて、ご指摘いただいたが、もしかすると管理者権限はいらないのかもしれない。僕が試したときには、管理者権限がないときに失敗し、管理者権限ありでプロンプトを立ち上げたら、うまくいった。
POSIX互換OS
POSIX互換OSとは、かんたんに言うと、UNIX系のOSということ。GNU/LinuxやMac OS Xなどが含まれる。
Mac OS Xでの注意点
Xcodeが導入されているか確認する。
% xcodebuild -version
Xcode X.X
Build version XXXXX
このように、バージョンが表示されれば、Xcodeはシステムに導入されている。Xcodeがなければ、App StoreからXcodeを導入する。いちど立ち上げて、ライセンスに同意しておく。
Gentoo GNU/Linuxでの注意点
Gentoo GNU/Linuxでは、GHCを導入するために、USEフラグにtinfoを追加して、ncursesを再導入する必要がある。
% sudoedit /etc/portage/package.use/ncurses
sys-libs/ncurses tinfo
% sudo emerge -av ncurses
POSIX互換OSでStackを導入する
システムに、コマンドcurlかwgetがあることを、確認する。コマンドwhichで確認できる。
% which curl
/usr/bin/curl
% which wget
/usr/bin/wget
システムにコマンドがあれば、うえのように、そのフルパスが表示される。どちらもないときは、それぞれのディストリビューションのやりかたで、どちらかを導入する。それぞれのコマンドについて、つぎのように実行する。
curlでは
% curl -sSL https://get.haskellstack.org/ | sh
wgetでは
% wget -qO- https://get.haskellstack.org/ | sh
コマンドwgetのオプションのOは、数字の0ではなく、アルファベットのO。
GHCの導入
Stackを使って、GHCを導入するには、つぎのようにする。
% stack setup
対話環境の使いかた
立ち上げと終了
GHCの導入ができたら、さっそく対話環境であるGHCiを、試してみよう。つぎのようにして、立ち上げる。
% stack ghci
いくつかのメッセージのあとに、プロンプトが表示される。はじめの立ち上げには、すこし時間がかかる。
Prelude>
終了させるには、コマンド:quitを使う。
Prelude> :quit
Leaving GHCi.
値や式の打ちこみ
対話環境に、いろいろな値を打ちこんでみましょう。
% stack ghci
Prelude> 4492
4492
Prelude> 'c'
'c'
Prelude> pi
3.141592653589793
対話環境は、打ちこんだ式を評価し、結果を表示します。4492や'c'はリテラルです。piは定義ずみの変数です。
対話環境は、評価した値で変数itを束縛しておいてくれます。
Prelude> 344925345991 * 36251192382
12503955074947653440562
*Main> it
12503955074947653440562
この変数itは、続く計算で使うことができます。
Prelude> it * 15
187559326124214801608430
演算子(*)は、かけ算です。
履歴
おなじ式を何度も打ちこむときや、一部を変えた式を打ちこむようなときに、履歴機能が使えます。
Prelude> 12345 * 6789
83810205
Prelude> "Haskell Language"
"Haskell Language"
Prelude> pi
3.141592653589793
ここで、上矢印キーを3回、押す。
Prelude> 12345 * 6789
エンターキーは押さずに、今度は、下矢印キーを1回押す。
Prelude> "Haskell Language"
左矢印キーを押して、カーソルを1文字ぶん、もどす。バックスペースキーを8回、押して、Languageを消す。Brooks Curryと打ちこみ、エンターキーを押す。
Prelude> "Haskell Brooks Curry"
"Haskell Brooks Curry"
強制終了
式の評価が無限ループになってしまい、プロンプトが、もどってこなくなってしまうことがある。そういうときは、Ctrl-Cで強制終了させる。
Prelude> repeat "Haskell"
["Haskell","Haskell","Haskell",...
画面が"Haskell"で、うめつくされる。Ctrl-Cで表示をおわらせる。
"Haskell","Haskell","Haskell",...
(Ctrl-Cを押す)
"Has^CInterrupted.
Prelude>
あるいは、何も表示されないまま、かたまってしまうこともある。
Prelude> x = x
Prelude> x
(Ctrl-Cを押す)
^CInterrupted.
型の表示
対話環境では:typeコマンドで型を表示することができる。
Prelude> :type 'c'
'c' :: Char
Prelude> :type False
False :: Bool