:プラグインのライターは次のようになり、単一の機能を提供します。自分のタイプのユーザープラグインはどのように処理できますか?私はHaskellのモジュール式で拡張可能なテキストエディタを書いていると私は、このような方法で、プラグインを実装したいと思い
handleEvent :: (PluginState, EditorState) -> Event -> (PluginState, EditorState)
として、各イベントが発生すると、プラグインは、現在のエディタ状態および独自の状態のカスタマイズされたチャンクを使用して、新しいエディタ状態および新しいプラグイン状態を計算することができる。もちろん、それぞれのPluginはPlugin状態のために別のTypeを持っているので、私はこれを自分のシステムに一般的な方法でどのように組み込むことができますか。
は、どのように私は漠然と、このような何かを書くことができます。
type Plugin = (PluginState, EditorState) -> Event -> (PluginState, EditorState)
data MyEditor = MyEditor EditorState [Plugin] [PluginState]
PluginStateが、具体的なタイプではないのですか?
TLDR;すべてのプラグインの状態タイプをグローバルな状態にベーキングせずに、非具体的な型の値のマップをアクセス可能な方法で保存するにはどうすればよいですか?私は新しいプラグインが追加されたときにエディタを再コンパイルしても問題ありません。
ありがとうございます!私は本当にこの1つに固執しています:/
あなたが何か明確化が必要な場合はお問い合わせください!
これの出発点は、GHCがプラグインをどのように処理し、Yiがどのように設定を処理するかを調べることです。どちらも部分再コンパイルのアプローチを取っています... – Alec
https://hackage.haskell.org/package/vaultのケースのように聞こえます – Gurkenglas