Haskell の Windows へのインストールと Emacs モードの設定

Haskell は純粋関数型のプログラミング言語です。 今回は Haskell の Windows へのインストール、使い方および Emacs での設定について説明します。

Haskell とは

Haskell は関数型プログラミングをやるために作られたような言語で、 大きな特徴は次の 2 つです。
  • 純粋関数型言語
  • 遅延評価
関数型プログラミングでは値を変更しないように作ります。 しかし、関数型言語はいろいろとありますが、多くは使いやすさ等の理由により、制限付きで値が変更できるようになっています。
そんな中 Haskell は純粋関数型なので、本当に値が変更できません。 これは融通が利かないとも思われるかもしれませんが、 純粋に関数型でプログラミングできるだけの機能がそろっているとも言えます。


最近では C# の LINQ といったように関数型にとどまらず、高階関数を使った Stream 系のデータ処理が広がってきました。 そこでは必要になったときに初めて計算するという遅延評価になっていることが多いです。
これはメモリーの使用量を減らすなどのメリットがあってそうなっているのですが、 Haskell では全てで遅延評価となります。 こちらも関数型言語といわれる言語でもそこまで対応している言語はほとんどありません。


また、 Haskell はスクリプトとして動作させることもできますが、ソースコードをビルドして、実行ファイルを作るコンパイル型の言語です。ただ、コンパイル型といってもそんなに速いわけではありません。

Scala は JVM, F# は .NET というように新しい関数型言語の多くは仮想マシンで動作する言語が多いです。 新しい言語ではライブラリー等の環境が成熟していないといったデメリットがついて回るものなのですが、 JVM や .NET の言語ではそれがありません。
そういった意味では、 Haskell は学術的な意義の高い言語ですが、実用性という面ではこれからの言語だと思います。

インストール

Haskell には Haskell Platform というコンパイラーや開発ツールがセットになったものが用意されていて、インストーラーもあるので、インストールは簡単です。

ダウンロード

以下のサイトからインストールする環境にあわせて 32 ビットまたは 64 ビット版のインストーラーをダウンロードします。 haskell_dl.png

インストール

ダウンロードしたインストーラー(HaskellPlatform-YYYY.X.X.X-zzzz-setup.exe)を実行するとインストールが始まります。

haskell_inst.png

インストール先を指定して、 ウィザードを続行すればインストールは完了です。

インストールすると "(インストール先)/bin" 以下にコンパイラー等の実行ファイルが格納されます。 bin フォルダーへの PATH の登録もインストーラーが行ってくれます。

使い方

bin フォルダー内の実行ファイルのうち、主に使うのは次の 3 つです。
  1. GHCi : REPL(対話型)
  2. runghc : スクリプトとして実行
  3. ghc : コンパイラー

REPL(対話型) : GHCi

REPL は入力行をすぐ評価することができ、動作確認など開発時に使用します。
~/lang/hs $ ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> print "Hello world!"
"Hello world!"
Prelude> :quit
Leaving GHCi.
ghci で起動し、 :? でヘルプ、 :quit で終了します。

Windows のスタートメニューから [Haskell Platform YYYY.X.X.X] → [WinGHCi] を選択すると WinGHCi が起動します。こちらは多少 GUI で操作できる GHCi です。

haskell_winghci.png

runghc : スクリプトとして実行

まず、 ソースファイルを用意します。 Haskell ではファイルの拡張子には hs が使われます。

hello.hs :
main =
    print "Hello world!"
スクリプトとして使う場合には、 runghc にソースコードを渡して実行します。
~/lang/hs $ runghc.exe hello.hs 
"Hello world!"
スクリプトとして実行する場合 runhaskell(.exe) も使えます。
微妙な違いはありますが、ほぼ同じものです。

GHC : コンパイラー

GHC(Glasgow Haskell Compiler)ではソースファイルをコンパイルして実行ファイルを作ることができます。
~/lang/hs $ ghc hello.hs
[1 of 1] Compiling Main             ( hello.hs, hello.o )
Linking hello.exe ...
~/lang/hs $ ./hello.exe 
"Hello world!"
実行ファイル名はデフォルトでは 「ソースファイルのベース名 + ".exe"」 となります。 指定したい場合は -o オプションを使います。

その他

bin フォルダー内のその他の実行ファイルについても簡単に紹介します。
コマンド 機能 参考
ghc-pkg Haskell のパッケージ管理ツール。
パッケージ管理には cabal も使います。 cabal の方は lib/extralibs/bin フォルダーにあり、こちらにも PATH は通っています。
Haskellのパッケージ管理について調べてみた - りんごがでている
haddock ソースコードからドキュメントを作成。
Haskell 版の Doxygen や JavaDoc のようなものです。
Haskell の Javadoc, Haddock を使う - 一歩前進
hp2ps ヒープ領域のプロファイラー。 本物のプログラマは Haskell を使う - 第 46 回 ヒープ・プロファイラで領域漏れを探る: ITpro
hpc Haskell Program Coverage: カバレッジ(テストでソースコードをどの程度実行できたか)の計測ツール。 Haskell program coverage - HaskellWiki
hsc2hs C のコードを Haskell から利用するための補助ツール 12.2. C コードへの Haskell インタフェースを書く: hsc2hs

Emacs モードの設定

Hakell 用のパッケージはいろいろありますが、最低限必要なのは haskell-mode です。 これはパッケージマネージャーから簡単にインストールすることができます。 インストールすると hs などのファイルを開いた時に haskell-mode になります。

ただし、そのままではインデントをしようとすると変なエラーが出ます。 これはインデントのモードを設定していないためなので、 モードを 3 つの中から選んで、設定しておく必要があります。
モード 説明
haskell-simple-indent 単純な TAB によるインデント
haskell-indent コードの構造を考慮したインデント
haskell-indentation haskell-indent に加え、 [RET][DEL] のキーを拡張

これらのモードにする場合は turn-on-xxxx の関数を haskell-mode になった時に呼び出すようにします。
(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)
Emacs では「改行 + インデント」はC-jを使うのが普通だと思うので、個人的にはhaskell-indent でいいと思います。 なお、 インデントに関しては hi2 というパッケージもあり、インデントルールは同じで、もう少し複雑な動きをします。 使う場合は hi2 をインストールして、同じような設定を書きます。
(add-hook 'haskell-mode-hook 'turn-on-hi2)



関連記事
スポンサーサイト



Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
31位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
5位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

08月 | 2023年09月 | 10月
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。