5

関数内で、 a の両方の部分をトラバースしControl.Lens.Traversalます。与えられた例はbesideBitraversable

>>> ("hello",["world","!!!"])^..beside id traverse
["hello","world","!!!"]

制約の代わりに2 つの s を取るbeside( と呼びましょう) のより明示的なバージョンを作成できますか? 私はそれが次のように使用されると想像します:bothPartsBitraversableTraversal

>>> ("hello",["world","!!!"])^..bothParts _1 _2 id traverse
["hello","world","!!!"]

これはすでに存在しますか?これは危険すぎて正しく使用できませんか? ありがとうございました!

編集:

またはおそらく次のようなもの:

>>> ("hello",["world","!!!"])^..bothParts _1 (_2.traverse)
["hello","world","!!!"]
4

1 に答える 1

2

必要なコンビネータは、2 をTraversal同時に使用することになっています。しかし、この種のコンビネータはTraversal一般的な法則、特に「重複禁止」の法則に違反していますTraversal。a は各要素を 1 回だけトラバースする必要があります。

おそらく望ましくないものの例を次に示します。

>>> (1, 2) ^.. bothParts _1 _1
[1, 1]    

より正確に言うと、 packageTraversalのドキュメントlensを引用したいと思います:

a の法則は、 「イテレーター パターンの本質」で述べTraversal tた の法則に従います。Traversable

t pure ≡ pure
fmap (t f) . t g ≡ getCompose . t (Compose . fmap f . g)

この要件の結果の 1 つは、 aが開始したTraversal後続の候補と同じ数の要素を残す必要があることです。Traversalこれらの法則の強さのもう 1 つの証拠は、「イテレーター パターンの本質」のセクション 5.5 で表明されたTraversable、同じエントリを複数回トラバースするエキゾチックなインスタンスに関する警告が、同じ論文の 2 番目の法則によって実際には既に除外されていることです!

于 2014-05-23T19:49:27.840 に答える