ログ日記

作業ログと日記とメモ

GHCJS + Jsaddle

Jsaddleを動くようにした。
昨日書いた https://n314.hatenablog.com/entry/2019/06/06/210731 スタブはあまり意味はなかった。
理解は進んだけども。
webkit.idl などのWebIDLにDOMの定義があるから、そこから自動生成しているっぽい。
ということは、基本的にjsaddle-domはDOMの仕様を網羅しているということになる。


interoやreplでprintデバッグのようなことはせずに、素直にjsaddleをブラウザで動かした方が早い。

www.reddit.com
ここにもそのようなことが書いてあった。



というわけでサンプルを作った。
github.com
これは

github.com
ここのコードを持ってきたんだけど、そのままでは動かないから結構変更した。

hoogleしたりググったり、でも分かりづらいからghcjs-domのリポジトリ持ってきてgrepして直接ソースを見ることが多かった。
説明は無く型が合えば動くだろうっていう姿勢、なかなかつらいものがある。まあ実際に型が合えば動いたんだけど…。
Haskellerは割とカジュアルに互換性を崩すっていうものの一端を見た。

型チェックが厳しくて、createElementで生成したElementはイベントのターゲットにできない。イベントが扱えるのはHTMLElementなので。
いつもはNodeとかElementとかHTMLElementとか気にせず同じものとして扱ってたけども、違うものなんだよねえ…。Haskellを使えば他の言語のバグが見つかるっていうのはこういう感じなんだろうか。


せっかくなのでサンプルは少し変更してHTMLファイルを読み込むようにしている。
動作確認しやすく、既存のサイトの一部に組み込みやすいように。