多くのタイプの光学系には、ファンラーホーフェンの表現があります。
たとえばLens
、タイプのa は次のLens s t a b
ように表すことができます。
Functor f => (a -> f b) -> s -> f t
同様にTraversal
、は同様の方法で表すことができ、Functor
制約をApplicative
次のように入れ替えます。
Applicative f => (a -> f b) -> s -> f t
MonocleやArrowなどのいくつかの光学フレームワークは、というタイプを定義しますOptional
。
Monocleの光学では、階層 Optional
はLens
との間に適合しますTraversal
私が理解しているように:a Traversal
が0から多くのターゲットをLens
持つ可能性がある aのような場合、は0から1のターゲットを持つ可能性があるOptional
aのようなものです。Lens
Monocleでは、Optional
関数のペアとして定義されます。
getOrModify :: s -> Either t a
set :: (b, s) -> t
モノクルのソースコード内のコメントは、それが表現することも可能ですことを示唆しているOptional
「として弱いPLens
と弱いですPPrism
」
をOptional
ファンラーホーフェン関数として表すことはできますか?
Functor
とApplicative
でliftA2
、ない純粋に、そしてそれがで視神経を定義し、多くの1つのターゲット?名前はありますか?