haskell-jp / questions #106 at 2024-11-20 12:37:42 +0900

megaparsec, vector, text に依存するアプリケーションを書きました。このアプリケーション上の Text -> Text の関数をウェブブラウザ上でJavascriptから利用したいのですが、現状もっとも手軽な方法は何でしょうか?
アプリケーションサーバーが要らないという意味でお手軽なのは、やっぱりGHCのWasmバックエンドを使ってWASI executableにする方法ではないかと思います。
以下の流れで動きました!ありがとうございます。
https://www.haskell.org/ghcup/guide/#ghc-wasm-cross-bindists-experimental に従って、GHCのWASM backendをインストール
https://ghc.gitlab.haskell.org/ghc/doc/users_guide/wasm.html#using-the-ghc-wasm-backend-to-compile-link-code の指示に従ってcabalに`--with-compiler=`, --with-hc-pkg=, --with-hsc2hs= オプションを渡してコンパイル
$(wasm32-wasi-ghc --print-libdir)/post-link.mjs -i bin/out.wasm -o bin/ghc_wasm_jsffi_raw.js でグルーコードを生成
wizer で初期化済みWASMを生成、`wasm-opt` と wasm-strip (要wabt)で最適化(最適化を掛けないとかなり遅い)
ghc_wasm_jsffi_raw.jsawait import("node:timers") がブラウザだと落ちるのでコメントアウト
https://github.com/tweag/ghc-wasm-miso-examples/blob/main/frontend/index.js を参考に、モジュールを読み込み