HaskellのインストールからAtomの環境構築まで

少し前にHaskellを始めたので、その環境構築などをメモ。

なぜHaskellをやろうと思ったか

ある勉強会で出会った人が「Haskellはいいぞ〜」って言ってたのでやってみよかなと思いました。
何に使えるかは置いといて、HaskellやScalaのような言語をやっておくと、 なるほど、そういう考え方もあるんですねと気付かされるらしい。知らんけど。

また、これまで僕はよくJavaScriptを書いていたのですが、この言語は

  • 弱い静的型付け
  • 手続き型やオブジェクト指向でよく書かれる

という特徴を持ち、一方Haskellは

  • 強い静的型付け
  • 関数型

なのでよくわからないなりに対局的な存在なのかなと感じたのでやってみると学ぶことが多いのではないかと思い始めてみました。
Haskellのなにがいいのかをわかりすく解説されている記事とスライドがありました。

スライドはこちら

【参考】 Haskellで生産性を高める-Pythonからの移行 | POSTD なぜHaskellを学ぶと良いか – Qiita  

インストール

Stackってなに?

Haskellを始めようとするとstackというツールを使おうと出てきますが、 これはHaskellで開発するプロジェクトの作成やビルドをやってくれるツールのようです。

僕もまだよくわかってないので、詳しくは以下の記事などを参考にしてみてください。

【参考】

MacにHaskellを入れる

以下の公式ドキュメントのページを参照にして入れます。

Home – The Haskell Tool Stack

$ curl -sSL https://get.haskellstack.org/ | sh プロジェクトの作成をします。

$ stack new my-project

$ cd my-project

$ stack setup

ビルド

$ stack build

実行

ビルドしたプロジェクトをstack exec {プロジェクト名} -exeで実行できます。

今回の場合は、 $ stack exec my-project-exe

実行結果は、

someFunc

あれ、ハローワールドじゃない・・。  

hello worldする

src/Lib.hsの中身を以下のように変更する

再びbuildしてexecすると hello world! と表示される  

ビルドせずに実行する

ちなみにビルドせずに実行する方法もあります。

$ stack runghc app/Main.hsで実行できます。
ghcでコンパイルして実行する方法です。

これ、本来ならstackを入れた時に入ってる気がしますがなぜかエラーが出たので再インストールします。

$ brew install ghc でコンパイラをインスコ

$ ghc -o hoge hoge.hsでコンパイル

$ ./hogeで実行  

会話する

$ ghciを実行することでpythonの会話のように 会話しながら実行できる。

:quit で終了。

:l fileName でファイルを読み込み、その中で定義された関数などを使うことができます。

その後、そのファイルに関数などを追記した後は:rでリロードをかけられます。

また、定義が複数行にまたがる場合は、以下のように:{:}で囲うことで書くことができます。

:t functionName でその関数の型の推論結果を表示してくれます。便利!

:m + Module.name Module.name2 でモジュールをロードできます。  

読み込む済みのモジュールを外したいときは、:m - Module.nameでいけます。

Atomの環境構築

お約束のAtom環境設定をします。

ide-haskell

公式ドキュメント 文法エラーの表示やら、コードフォーマットなどいろいろやってくれるみたいですね。

公式ドキュメントのこのページによると、このパッケージだけじゃなく、たくさんの依存パッケージを入れる必要があるようだ。

language-haskell

Haskellファイルにシンタックスハイライトとスニペット補完を提供します。

autocomplete-haskell

補完してくれます。

haskell-ghc-mod

autocomplete-haskellが依存しているパッケージのようですが、 Enableするとエラーが出てよくわからないので一時的に保留しています。

その他パッケージ

Haskellを学ぶ

サイトで学ぶ Haskell 超入門 – Qiita

本で学ぶ すごいH本

独特な文法が良い感じですね。

どこで使われているのか

意外といろんなところで使われています