要素のリストを含むネストされたデータ構造の操作を実行しようとしています。さまざまなアプローチをいじくり回した後、最終的にこれを行うための最良の方法としてレンズに落ち着きました。それらは、構造の特定の要素を見つけて変更するのに完全に機能しますが、これまでのところ、新しい要素を追加する方法に困惑しています。
私が読んだことから、トラバーサルの法則に違反して新しい要素をリストに挿入するため、トラバーサルを技術的に使用することはできません。これは、最初にトラバーサルを使用してそれを行う方法さえ理解できると仮定しています(私はまだ Haskell にかなり弱く、lens パッケージ内のほとんどのものの型シグネチャには頭が回転します)。
具体的に私が達成しようとしているのは、特定のセレクターに一致する要素のリストでいくつかの要素を見つけ、一致した要素の前または後に新しい要素を挿入することです(前または後の関数への異なる引数)マッチ)。Control.Lens には、私がやろうとしていることを達成できる何かが既にありますか? 型シグネチャについての私の理解は弱すぎてそれを見ることができませんか? 私がやろうとしていることを達成するためのより良い方法はありますか?
リストの最初または最後に新しい要素を追加しようとしているだけなら、かなり簡単ですが、途中の特定の場所に挿入するのは難しい部分です。私が書いたレンズ前のコードのいくつかでは、私が望んでいたことを達成するために折り目を使用しましたが、構造のより深くネストされた部分 (折り目の内側の折り目の内側の折り目など) で危険になり始めていたので、私は Control.Lens に目を向けて、その混乱の一部を解き明かそうとしました。