4

私はこの記事を読んでいて、そのセクションの1つに次のように記載されています。

レンズは後方に構成します。(.)関数のように振る舞わせることはできませんか?

あなたの言うとおりです。さまざまな理由でそうではありませんが、直感は正しいです。レンズは機能と同じように組み合わせる必要があります。これに関して重要なことの 1 つは、id がレンズに影響を与えることなく、任意のレンズで事前または事後構成できることです。

Lenses compose backs とはどういう意味ですか?

また、これはどういう意味ですか:(.)関数のように振る舞わせることはできませんか?

(.)は関数であり、それをレンズで使用することで、(.)何か他のように動作しますか?

4

2 に答える 2

4

Getterレンズの一部は、 を使用して抽出できる関数と考えることができますview。たとえば、fst関数を書くレンズの方法は次のとおりです。

view _1 :: (a,b) -> a

次に観察します。

view _1 . view _2 :: (c, (a,b)) -> a  -- First take the second pair element, then the first 
view (_1 . _2)    :: ((b,a) ,c) -> a   -- This is "backwards" (exactly the opposite order of the above)

レンズの場合、(.)関数のようには動作しません。関数の場合、f . gは「最初に g を適用し、次に f を適用する」を意味しますが、レンズの場合は を意味しfirst use the lens f, then use the lens gます。実は(.)どちらのタイプも機能は同じなのですが、レンズのタイプが逆に見えてしまいます。

于 2014-04-15T19:25:51.577 に答える