これを実現するには、GHCJS
次の方法で 3 つのコア パッケージからプロジェクトを構築するだけです。
- フロントエンド - ghcjs-dom に基づくもの、私はReflex-domが好きです
- バックエンド - お気に入りのフレームワークを使用してください。私はSnapが好きです。Yesod も同じように動作するはずです。
- shared - フロントエンドとバックエンドの間で共有されるコード
もちろん、フロントエンドとバックエンドの両方が共有に依存している場合。フロントエンドは でコンパイルされGHCJS
、バックエンドは でコンパイルされGHC
ます。
完全な例を見たい場合は、hsnippetを勉強することを強くお勧めします。WsApi.hs
一連のアップ メッセージとダウンストリーム メッセージが定義されている場所を見てください。すべての JSON インスタンスは 1 か所で派生され、フロントエンドとバックエンドの両方にインポートされます。
Hsnippet は WebSocket を使用します。もちろん、これは要件ではありません。独自のアプリで通常の XHR を使用できます。原則は変わりません。共有パッケージで API とシリアル化インスタンス (通常は JSON) を定義し、関連するモジュールをフロントエンドとバックエンドの両方にインポートします。
個人的には、検証コード、永続的に生成されたデータベース エンティティ定義なども共有しています。設定したら、追加のものを共有するのは、ほとんどの場合、共有モジュールの 1 つにコピー ペーストして、どこにでもインポートするだけです。