首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Setter来说,保持索引是什么意思?

对Setter来说,保持索引是什么意思?
EN

Stack Overflow用户
提问于 2016-08-23 02:35:28
回答 1查看 80关注 0票数 3

我正在尝试对lens中的Setters有一些直观的了解。很容易遇到需要相当吓人的Conjoined类的IndexedSetter

代码语言:javascript
复制
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

但对于函数来说,这是相当微不足道的:

代码语言:javascript
复制
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时,我应该关心它吗?

EN

回答 1

Stack Overflow用户

发布于 2016-08-23 20:11:40

这里有两个问题。第一个问题:什么是“索引保留”,在其他文档中有一个提示:

f . g (和f .> g)为您提供g的索引,除非g是索引保留的,如PrismIsoEquality,在这种情况下,它将传递f的索引。

另一个问题:i在其他Indexable实例中是受约束的:

代码语言:javascript
复制
instance i ~ j => Indexable i (Indexed j)

哪里

代码语言:javascript
复制
-- | A function with access to a index. ...
newtype Indexed i a b = Indexed { runIndexed :: i -> a -> b }

简而言之,这是一个编码技巧,使索引和非索引光学合成。我们在Profunctor中保持多态,并在很久以后用(->)Indexed i实例化它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39086469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档