2016-08-22 3 views
3

私はセッターについて幾分直感を得ようとしています。lensです。それは、Conjoinedクラスを威圧むしろ必要とIndexedSetterに実行するのは簡単です:Setterがインデックスを保持することは何を意味しますか?

class 
    (Choice p, Corepresentable p, Comonad (Corep p), Traversable (Corep p) 
    , Strong p, Representable p, Monad (Rep p), MonadFix (Rep p), Distributive (Rep p) 
    , Costrong p, ArrowLoop p, ArrowApply p, ArrowChoice p, Closed p 
) => Conjoined p where 

しかし、機能のために、それはかなり些細です:

class Conjoined p => Indexable i p where 
    -- | Build a function from an 'indexed' function. 
    indexed :: p a b -> i -> a -> b 

instance Indexable i (->) where 
    indexed = const 

iがあること以外の方法で制約されていないようです引数はp a bの後です。

Setterで作業する場合、「インデックス」とは何かを気にする必要がありますか?

答えて

1

ここに2つの質問があります。最初の1:「インデックス保存」するものですが、ヒントは、他のドキュメントにあります:

f . g(およびf .> ggがインデックス保存、PrismIsoまたはEqualityなどのある場合を除き、あなたにgの指標を与えますその場合は、fのインデックスを通過します。

他の質問:iが他Indexableインスタンスに制約される:

instance i ~ j => Indexable i (Indexed j) 

-- | A function with access to a index. ... 
newtype Indexed i a b = Indexed { runIndexed :: i -> a -> b } 

まもなく、この構成に連動および非インデックス付き光学素子を作るために、符号化トリックであります。我々はProfunctorに多形性を残し、それよりかなり遅く(->)またはIndexed iでインスタンス化します。

関連する問題