未来を創る、テックコミュニティー

代表技術通信~Get Programming with Haskell①

草場代表
2020/11/25

こんばんは。代表の草場です。

Haskell触ります。「Get Programming with Haskell」についてです。まずは、Lesson 1. Getting started with Haskellからです。

レッスン1を読んだ後は、

Haskell開発用ツールのインストール
GHCとGHCiを使う
Haskellプログラムを書くためのヒントを使う

ができるそうです。

1.1. Haskellへようこそ

Haskell プログラムを書き、コンパイルし、実行するための基本をダウンロードするところから始まります。その後、コード例を見て、Haskell でのコードの書き方について考え始めます。

1.1.1. Haskellプラットフォーム

Haskellコミュニティは、Haskellプラットフォームと呼ばれる便利なツールをインストールできる単一のパッケージにまとめています。
Haskellプラットフォームには以下のものが含まれています。

グラスゴーHaskellコンパイラ(GHC)
対話型インタプリタ(GHCi)
Haskell プロジェクトを管理するためのスタックツール
便利な Haskell パッケージの束

Haskell プラットフォームは こちら からダウンロードできます。

1.1.2. テキストエディタ

どのエディタを使うべきか?エディタができることは、インデントを管理したり、シンタックスハイライトを提供する以外にはほとんどありません。多くのHaskell開発者はEmacsでhaskell-modeを使っています。

1.2. グラスゴーHaskellコンパイラー(GHC)

Haskellはコンパイルされた言語です。コンパイラの仕事は、人間が読めるソースコードを機械が読めるバイナリに変換することです。コンパイルの最後には、実行可能なバイナリファイルが残されます。
コンパイラが優れている点は、コンパイラがあらかじめコードを変換してくれるので、書いたコードの解析や最適化を行うことができる点です。
GHC を起動するには、ターミナルを開いて ghc と入力します。

$ ghc

コンパイルするファイルが必要です。hello.hsという簡単なファイルを作ります。テキストエディタで、hello.hsという名前の新しいファイルを作成し、次のコードを入力します。

--hello.hs my first Haskell file! 1

main = do 2

print "Hello World!" 3

1 ファイル名のコメント行
2 あなたの「メイン」機能の開始
3 メイン機能は “Hello World “をプリントアウトする

もう一度GHCを実行してみます。

$ ghc hello.hs

[1 of 1] Compiling Main

Linking hello …

コンパイルが成功すると、GHCは3つのファイルを作成します。

hello (Windowsではhello.exe)
hello.hi
hello.o

helloは、バイナリ実行ファイルです。このファイルはバイナリ実行ファイルなので、単純にファイルを実行することができます。

$ ./hello

"Hello World!"

デフォルトでは、コンパイルするすべてのHaskellプログラムはmainを持つ必要があり、Java/C++/C#のMainメソッドやPythonの__main__と同様の役割を果たします。

例えば、hello.hs を helloworld という名前の実行ファイルにコンパイルしたい場合は、-o フラグを使ういます。

$ghc hello.hs -o helloword

[1 of 1] Compiling Main

Linking helloworld ....

1.3. HASKELL-GHCIとの対話

GHC の対話型インターフェイスがGHCi です。: ghci. GHCi を起動すると、新しいプロンプトが表示されます。

$ ghci

GHCi>

GHCi の場合、終了するには :q コマンドを使います。

$ ghci

GHCi> :q

Leaving GHCi.

GHCiの最も重要な使い方は、書いているプログラムとの対話です。既存のファイルを GHCi に読み込むには二つの方法があります。
一つ目は、ファイル名を引数として ghci に渡す方法です。

$ ghci hello.hs

[1 of 1] Compiling Main

Ok, modules loaded: Main.

もう一つは、対話型セッションで :l (または :load) コマンドを使用することです。

$ ghci

GHCi> :l hello.hs

[1 of 1] Compiling Main

Ok, modules loaded: Main.

どちらの場合でも、その後、自分が書いた関数を呼び出すことができます。

GHCi> :l hello.hs

GHCi> main

"Hello World!"

GHCでファイルをコンパイルするのとは異なり、ファイルをGHCiにロードするためのメインは必要ありません。ファイルをロードすると、関数や変数の既存の定義が上書きされます。ファイルを作業したり変更を加えたりしながら、ファイルを継続的にロードすることができます。Haskellは、強力なコンパイラサポートと自然で使いやすいインタラクティブな環境を持っているという点で、かなりユニークな存在です。Python、Ruby、JavaScriptのようなインタプリタ型言語から来ている場合は、GHCiを使っても違和感がありません。

 

この記事を書いた人
草場代表
エディター