HaskellなAltJS達をいじってみる
Haskell Advent Calender 2013 12/5日当番記事です。
CoffeeScriptとかHaxeとかTypeScriptみたいなJavascriptにトランスレートして使う言語たちをAltJSっていうそうです。HaskellコードをJSに変換するプログラムもいくつかあって、このページに一覧があって詳しい。そこに掲載されてるFayとHasteを触ってみます。他にUHCやGHCJSというのもありますが試したら弱冠インストールでハマったのでそれらは機会あればまた。
そいつらを上手く使えば、サーバサイトはYesodまたはScotty、クライアントサイドはHaskellなAltJSを使ってオールハスケルなWeb開発が(マークアップをHaskellでやるやつとかもありますね)可能になります。ちなみにScottyのTipsを以前少し書いたので以下もあわせてどうぞ。
あと、おまけ
さて、以下本題に戻ります。
Fay
Cabal installするだけなので簡単です。
# cabal install fay fay-base
happyが必要みたいなので入ってなかったらHappyを予め入れておきます。ubuntuならapt-getでhappyが入るので嬉しい。
クイックスタートやサンプルソースを見ると、JS上の要素をFayモナドとしてくみ上げていく方式のようです。JSONオブジェクトは自動的に変換してくれるそうなので、Haskell側で複雑な情報処理を行うJSON引数JSON戻り値な関数を作って、Fayモナド内でそれを呼ぶ感じで使うと便利そうですね。
module Alert where import FFI import Prelude main :: Fay () main = alert "Hello, World!" alert :: String -> Fay () alert = ffi "window.alert(%1)"
トランスレートはfayコマンドです。(cabal installした場合はcabalのbinディレクトにパスを通しておくこと)
fay --html-wrapper hello.hs
とすると、hello.htmlとhello.jsが出来るので、同じディレクトリにおいてページを開くだけです。こちらで見れます。
jQuery bidingsほか、いろいろとFayのプログラミングスタイルにバインディングするパッケージがあるようです。Fayは敷居が低くて簡単なのがいいですね。
Haste
これもcabal installするだけです。
# cabal install haste-compiler # haste-boot
haste-bootはcabalインストールディレクトリの/binにあるのでパスを通すのを忘れずに。サンプルを動かしてみます。
# git clone https://github.com/valderman/haste-compiler.git # cd haste-compiler/examples/canvas-simple/ # hastec canvas-simple.hs
hastecでコンパイルするとjsとhtmlが出力されるので、web見れるとこにページを開くだけ。こちらで見れます。Canvasグリグリのデモでいい感じです。