PureScript ver. 0.7.0 以上での Hello, World!
PureScript 0.7.1.0 で Node でコンソールに Hello, World! するところまでできたのでそのまとめ。
実例による PureScript を読んで勉強していたんだけど、先月終わりのバージョンアップの関係でそのままでは動かなくって調べたんでまとめる。英語の本家の方のドキュメントもこれから対応させていくらしい。
コマンドは Windows コマンドプロンプトのを使っているので UNIX 系の人は適宜読み替えること。
環境構築
用意するものは、PureScript コンパイラー(psc)と Node(NPM も使う)と Bower。(好みによって Cabal も。)NPM と Bower (と Cabal)がどういう使い分けをされてるかは以下な感じ。
- NPM
- Bower
- purescript-prelude のインストール
- ライブラリーの管理はこっちでするっぽい
- Cabal
psc のインストール
Homebrew なり Chocolatey なり NPM なり Cabal なり、直接バイナリーをインストールするなりする。詳しくはこちら。
Cabal というか Stack が楽なので Stack でインストールする方法は次の通り。
Stack はここからバイナリーをダウンロード。stack setup
して、stack install purescript
すると Stackage にないファイルが必要だといわれるのでそれを設定ファイルに記述する。設定ファイルの場所は Windows なら %USERPROFILE%\AppData\Roaming\stack\global\stack.yaml。さっきのエラーにファイルの場所が書かれている。設定ファイルに追記するものもエラーに書かれているのでそれを下記のように追記する。
extra-deps: - aeson-better-errors-0.9.0 - bower-json-0.7.0.0 - boxes-0.1.4 - pattern-arrows-0.0.2
で、もう1度 stack install purescript
するとインストールされる。どこに実行ファイルが保存されたかが表示されるのでパスを通す。
Node と NPM のインストール
apt-get なり Homebrew なり Chocolatey なり直接インストーラーでインストールするなりする。
Bower のインストール
> npm install -g bower
Hello World プログラム
下記が 0.7.0 以降での Hello World プログラム。Main.purs で保存する。
module Main where import Control.Monad.Eff.Console (log) main = log "Hello, World!"
0.7.0 より前のは下記。
module Main where import Debug.Trace main = trace "Hello, World!"
0.7.0 での変更点から今回のプログラムに関係するものを取り出すと下記になる。移行ガイドもある。
コンパイル
先のプログラムが依存するモジュールをインストールする。
> dir Main.purs > bower install purescript-console > dir bower_components purescript-console purescript-eff purescript-prelude
コンパイルする。
> psc --ffi 'bower_components\purescript-*\src\**\*.js' 'bower_components\purescript-*\src\**\*.purs' Main.purs > dir output Control.Monad.Eff Control.Monad.Eff.Class Control.Monad.Eff.Console Control.Monad.Eff.Unsafe Main Prelude
実行
生成された output\Main\index.js ファイルを見ると main
関数をエクスポートするだけのプログラムになっているので、実行する Javascript を書く。ここでは main.js としておく。
require("Main").main();
Node で require するためのパスを指定して実行する。
> set NODE_PATH=%cd%\output > node main.js Hello, World!