lens
特定の問題のためにライブラリを使用するのに苦労しています。渡ろうとしている
- 更新されたデータ構造
- その更新された構造の一部に焦点を合わせたレンズ
別の関数に、g
. g
データ構造からの共有情報と一部の情報が必要なため、レンズとデータ構造の両方を渡します。(それが役立つ場合、データ構造には結合確率分布に関する情報が含まれていますが、g
いずれかの限界でのみ機能し、私が見ている限界を知る必要があります。2 つの限界の唯一の違いは、定義の残りの部分との平均です。データ構造で共有されています)。
私の最初の試みはこのように見えました
f :: Functor f => Params -> ((Double -> f Double) -> Params -> f Params) -> a
f p l = g (l %~ upd $ p) l
where upd = ...
g p x = go p p^.x
しかし、更新用およびゲッター用であるf
と推測されるため、コンパイル中に失敗します。Identity
Const Double
私がやりたいことを達成するための最良の方法は何ですか? 次のいずれかを実行できると想像できます。
- レンズのコピーを作成して、タイプの推論がケースごとに異なるようにする
- 更新された構造とレンズを渡すのではなく、元の構造と変更された値を返すレンズを渡します (レンズが参照する構造の部分のみを更新する場合)。
- 関数/データ構造のより良い設計選択を行う
- まったく違うもの
助けてくれてありがとう!