gpt4 book ai didi

haskell - optic Fold 类型的 Monoid r => Const r 如何推广到 Contravariant + Applicative?

转载 作者:行者123 更新时间:2023-12-01 10:18:59 25 4
gpt4 key购买 nike

从这个 Getter 类型开始

type Getter s a = forall r. (a -> Const r a) -> s -> Const r s

我们需要一个额外的 Monoid 约束来获得一个 Fold:

type Fold s a = forall r. Monoid r => (a -> Const r a) -> s -> Const r s

但是 Fold 的实际和更一般的类型是

type Fold s a = forall f. (Contravariant f, Applicative f) => (a -> f a) -> s -> f s

我理解Contravariant是用来排除Identity从而保证我们只能取值。但是不明白Monoid r是怎么对应Applicative的?当然,Const 也是一个 Applicative,但是幺半群隐藏在哪里?

抱歉这个令人困惑的问题。

最佳答案

Monoid 实例隐藏在Const rApplicative 实例的约束中。

Const r is only an instance of Applicative if r is an instance of Monoid :

instance Monoid m => Applicative (Const m) where
...

关于haskell - optic Fold 类型的 Monoid r => Const r 如何推广到 Contravariant + Applicative?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57440564/

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