Edited at

「Haskell入門ハンズオン!」事前資料 - 2/3

More than 1 year has passed since last update.


処理系の導入と対話環境


「Haskell入門ハンズオン!」事前資料の一覧


  1. 概要

  2. 処理系の導入と対話環境

  3. やってみよう


処理系の導入


はじめに

パッケージを導入する仕組みとして、Cabalがある。そして、パッケージをアップロードする場所としてHackageがある。それだけがあった。しかし、Hackageにアップされるパッケージが増えていき、依存関係も複雑化し、それぞれのパッケージのバージョンも、さまざまにアップデートされていった。結果として、「依存性地獄」が生じた。そこに、すくいの神として、StackとStackageとがあらわれた。

トラブルなく、さまざまなパッケージを使っていくうえでは、Haskellの処理系であるGHCを直接、導入するのではなく、まずStackを導入し、それを利用してGHCを導入するのが、現在では最適解かと思われる。


Stackのインストール

つぎのアドレスに、導入のしかたが書かれている。

http://docs.haskellstack.org

以下に概要を説明する。


Windows 10

つぎのアドレスからインストーラを、ダウンロードする。

http://www.stackage.org/stack/windows-x86_64-installer

ダウンロードした.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