gpt4 book ai didi

haskell - Setter 保留索引是什么意思?

转载 作者:行者123 更新时间:2023-12-02 03:12:31 24 4
gpt4 key购买 nike

我试图在 lens 中获得一些关于二传手的直觉。很容易遇到 IndexedSetter这需要相当吓人的 Conjoined 类:

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 时我应该关心它吗?

最佳答案

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

f . g (and f .> g) gives you the index of g unless g is index-preserving, like a Prism, Iso or Equality, in which case it'll pass through the index of 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 实例化它。

关于haskell - Setter 保留索引是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39086469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com