関数型プログラミング言語Haskellの実行環境を整える

はじめに

こんにちは、野村です。

今回は、関数型プログラミング言語Haskellの実行環境を整える方法を紹介します。

以前、この記事でHaskellの導入方法を取り上げたのですが、

Haskellでいろんな数列を書き出してみる
今回は、Haskellというプログラム言語でいろいろな数列を表示させてみます。とにかくソースがシンプル。ほとんど魔術。せっかくなので、Haskellを導入する方法も紹介します。

どうやら、最小限の環境にとどまっていた模様。
今回はプロジェクトの生成まで突っ込んでみます。

導入

コンパイラとしてGHC、ビルドツールとしてStackというものを導入します。
GHCだけでも基本的なコンパイルは可能だけど、複数のパッケージを管理するような場合、Stackがあるほうがよいそうです。

Stack のインストール

以下のコマンドを実行するとインストールされます。

$ curl -sSL https://get.haskellstack.org | sh

なお、Stack本体のアップグレードのコマンドはこうなります。

$ stack upgrade

GHC のインストール

以下のコマンドを実行するとインストールされます。

$ stack setup

実行

REPLの起動

REPL(Read-Eval-Print Loop :対話的な実行環境)を起動するときは以下の通り

$ stack ghci
Prelude>

終了するときはCtrl-dで抜けられます。

スクリプトの実行

コマンド stack runghc にファイル名を渡すだけです。

$ stack runghc hello.hs
Hello!

プロジェクト

プロジェクトの作成

コマンド stack new にプロジェクト名を渡すだけです。

$ stack new myproject

生成されたものはこんな感じ。

$ cd myproject
$ ls -l
合計 40
-rw-r--r-- 1 jake jake   49  1月  4 13:27 ChangeLog.md
-rw-r--r-- 1 jake jake 1529  1月  4 13:27 LICENSE
-rw-r--r-- 1 jake jake   12  1月  4 13:27 README.md
-rw-r--r-- 1 jake jake   46  1月  4 13:27 Setup.hs
drwxr-xr-x 2 jake jake 4096  1月  4 13:27 app
-rw-r--r-- 1 jake jake 1516  1月  4 13:27 myproject.cabal
-rw-r--r-- 1 jake jake 1184  1月  4 13:27 package.yaml
drwxr-xr-x 2 jake jake 4096  1月  4 13:27 src
-rw-r--r-- 1 jake jake 2178  1月  4 13:28 stack.yaml
drwxr-xr-x 2 jake jake 4096  1月  4 13:27 test

ソースコードを配置するデレクトリは、app と src です。
・app:実行ファイル生成用のコードを格納。
・src:それ以外のコードを格納。

ソースコードの配置

実行ファイル生成用のコードは、app/main.hs の中に「main」という名前の関数を1つだけ定義する。

ビルドと実行

プロジェクトのルートデレクトリで以下のコマンドを実行します。

$ stack build

プロジェクトデレクトリ内の隠しフォルダの中に「myproject-exe」というファイルが生成されます。
ファイル名を変更したいときは、ファイル「myproject.cabal」内で設定できます。

実行するときのコマンドはこうなります。

$ stack exec myproject-exe

最後に

以上、Haskellの実行環境を整える方法を紹介しました。

今回参考にしたのは、この書籍です。

Haskell入門 関数型プログラミング言語の基礎と実践

ごく初歩的なことから始まり、コマンドラインツールやWebアプリケーションの作成、サーバとクライアントの連携まで実践的な技法を取り上げています。
これから、この本を使って少しづつ勉強するつもり。

というわけで、今回はこれにて。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

野村 野村のプロフィール
メインPCはWindows10のVirtualBox上のFreeBSD。Linux/Unixの小ネタを求めて日々右往左往してたりする。