私が知っているのは、一方が機能し、もう一方が機能しないということだけです。
コンテキスト:別のデータ構造へのF
を含む
1 つのデータ構造があります。私の目標は、与えられたとのフィールドを記述するを構築することでした。Data.Map.Map k S
S
Lens
F
k
S
問題は、キーk
がマップに存在しない可能性があることです。関数がその戻り値を Maybe でラップできることは問題ありません。ただし、を使用して Maybe を介してレンズを伝播できませんでしたat
。多くのスタック オーバーフローの回答を読んだ後、私はこれに出くわしました。
に置き換えるat
とix
、型の問題が解決したことがわかりまし(^.)
た(^?)
。
Question:
It seems like at
and ix
do the same thing, at least with regard to Map
. Both take a key and give a 'Lens' to the value at that key. However, ix
seems to play nice with the function composition operator (.)
. What is the difference between the two?
Off Topic Rant:
I like infix operators as much as the next guy but the Control.Lens package seems to have gone a little overboard. For a new user having some English names and a key somewhere would lower the learning curve. Due to the huge number of wrapper classes used in the Lens library it is particularly difficult to dig through the type signatures if you don't already know what is going on. My code is starting to look like Perl for heaven sake.