gpt4 book ai didi

haskell - Haskell中的Coyoneda和Deriving Functor

转载 作者:行者123 更新时间:2023-12-04 17:45:00 31 4
gpt4 key购买 nike

在研究了基于 MacLane、Awodey 和 Spivak 书籍的类别理论之后,我试图理解 Haskell 中的自由/操作单子(monad)。

我们可以使用 Control.Monad.Free 从一个数据类型中获取一个 monad。使用 Data.Functor.Coyoneda 将其转换为仿函数后,它基于称为米田引理的数学背景。

但我并不完全理解仿函数可以通过 GHC 中的派生仿函数扩展自动生成,而不是依赖米田引理。

Data.Functor.Coyoneda 相比,在 GHC 中使用派生仿函数是否有任何限制? ?

最佳答案

好问题!
CoyonedaDeriveFunctor做不同的事情。 Coyoneda创建一个新的、单独的数据类型,它恰好是 Functor对于任何选择的论点。 DeriveFunctor只需为本身是仿函数的类型生成样板代码。您只能导出 Functor您可以手动为其编写此类实例的类型的实例。

newtype Pred a = Pred (a -> Bool)作为一个(有点做作的)例子:没有instance Functor Pred因为Pred在其 a 中是逆变的参数,所以 DeriveFunctor将无法帮助您。另一方面Coyoneda PredFunctor因为Coyoneda fFunctor ,虽然不是一个非常有用的,对于任何 f .

顺便说一句,Freer monad作为 Free 的应用程序出现至Coyoneda .

关于haskell - Haskell中的Coyoneda和Deriving Functor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37648366/

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