gpt4 book ai didi

haskell - 恒等仿函数到底是做什么的?

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

这可能是微不足道的,但我不明白以下是什么意思。

instance Functor Identity where
fmap = coerce

所以,我可以尝试定义类似的东西:
Prelude Control.Lens Data.Functor.Identity> :t fmap
fmap :: Functor f => (a -> b) -> f a -> f b
Prelude Control.Lens Data.Functor.Identity> let z f g = coerce f g
Prelude Control.Lens Data.Functor.Identity> :t z
z :: Contravariant ((->) t) => (t -> a) -> t -> b

但是,用更简单的术语来说它是什么意思?

最佳答案

coerce的使用是 GHC 7.10 中的新功能,是为了提高效率。 “真实”的定义是

fmap :: (a -> b) -> (Identity a -> Identity b)
fmap f (Identity a) = Identity (f a)
Identity 的包装/展开构造函数应该在编译时优化掉,但它似乎是 base开发人员有理由通过使用 coerce 来确保没有性能损失。 .

我们可以使用的原因 coerceIdentity a同构于(相同于) a ,所以我们可以强制 a -> bIdentity a -> Identity b这恰好是 fmap 的定义专攻 Identity !

关于haskell - 恒等仿函数到底是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29803575/

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