Haskell では、GHC 9.10 から WASM Backend で JavaScript FFI が使えるようになりました。これにより、WASM にコンパイルされた Haskell プログラムをブラウザで動かして DOM を弄ったり、あるいはサーバサイドのランタイムで JavaScript の API を呼び出せるようになりました。
本講演では、実際に Cloudflare Workers 上で動作するブログシステムを、バックエンドからフロントエンドまで全て Haskell を使って開発した経験を通し、GHC の WASM クロスコンパイラを使った開発の現在について概観します。
当該ブログシステムのフロントエンドは Miso、サーバレスバックエンドは自前の Cloudflare Workers バインディングライブラリによって記述されていますが、ここで Servant を用いることで如何に両者の間でシームレスにデータをやり取りできるかについて紹介します。
また、この開発の過程でJavaScript のオブジェクトシステムとある程度両立する高水準 FFI ラッパーライブラリを開発しました。こちらでは GADTs や Linear Types などを使ってある程度の型安全性と効率を実現しており、こうした FFI 用ライブラリのデザイン手法についてもご紹介します。
Haskell、WASM、Servant、API、Cloudflare Workers、サーバレス、GADTs、Linear Haskell