gpt4 book ai didi

haskell - Getter 背后的故事是什么?

转载 作者:行者123 更新时间:2023-12-04 16:42:39 24 4
gpt4 key购买 nike

我偶然发现 Getter定义同时具有 FunctorContravariantf 的约束.

“getter”不能对“包含的部分”做太多事情并不奇怪,但是这个签名看起来像Phantom(a -> f a) -> s -> f s 的“van Laarhoven”设置中.隐式约束“s 知道a”是否在lens 中以这种方式表示? ?

如何找到 Getter 的一些具体实例的源代码这样我就能看到 mapcontramap正在使用?

最佳答案

一个Getter的想法是它是一个只读镜头。给定一个 Getter s a你可以拉一个 a出于 s ,但你不能把一个放进去。类型是这样定义的:

type Getter s a = forall f. (Contravariant f, Functor f) => (a -> f a) -> s -> f s

当一个类型既是 FunctorContravariant ,它实际上根本不依赖于它的类型参数:
import Data.Void

change :: (Functor f, Contravariant f) => f a -> f b
change = fmap absurd . contramap absurd

这样的仿函数看起来总是很像 Const b一些 b .

所以一个 Getter s a本质上是
type Getter s a = forall b . (a -> b) -> s -> b

但是为了使其与镜头生态系统的其余部分一起工作,它具有额外的多态性。

关于haskell - Getter 背后的故事是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39068004/

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