gpt4 book ai didi

haskell - Control.Monad.Reader.withReader 实际上是 Data.Functor.Contravariant.contramap 吗?

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

我正在阅读这本书 Haskell in depth我注意到以下代码示例:

withReader :: (r' -> r) -> Reader r a -> Reader r' a
这看起来像 contramap . Control.Monad.Reader之间有什么关系|和 Data.Functor.Contravariant ?

最佳答案

Reader的类型参数的顺序不正确,使其成为 contramap为了它。一个 Contravariant仿函数的最后一个类型参数总是需要逆变的,但是 Reader在其第一个类型参数中是逆变的。但是你可以这样做:

newtype FlippedReader a r = FlippedReader (Reader r a)

instance Contravariant (FlippedReader a) where
contramap f (FlippedReader x) = FlippedReader (withReader f x)
Reader也差不多是 Profunctor , 与 lmap = withReaderrmap = fmap , 但从 Reader r a 开始就不太适用了确实是 ReaderT r Identity a 的类型同义词(尽管您可以使用另一个 newtype 包装器使其像我在上面所做的那样工作)。和 (->)实际上是一个 Profunctor具有相同的行为,它与 Reader 同构.

关于haskell - Control.Monad.Reader.withReader 实际上是 Data.Functor.Contravariant.contramap 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69817514/

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