我正在尝试对lens中的Setters有一些直观的了解。很容易遇到需要相当吓人的Conjoined类的IndexedSetter:
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看起来除了作为p a b之后的一个参数之外,i没有任何约束。
是什么让它成为“索引”?在使用Setters时,我应该关心它吗?
发布于 2016-08-23 20:11:40
这里有两个问题。第一个问题:什么是“索引保留”,在其他文档中有一个提示:
f . g(和f .> g)为您提供g的索引,除非g是索引保留的,如Prism、Iso或Equality,在这种情况下,它将传递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实例化它。
https://stackoverflow.com/questions/39086469
复制相似问题