LoginSignup
14
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-06-21

処理系の導入と対話環境

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

  1. 概要
  2. 処理系の導入と対話環境
  3. やってみよう

処理系の導入

はじめに

パッケージを導入する仕組みとして、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
14
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
5