Coyoneda和在Haskell中推导出Functor

时间:2016-06-06 01:15:22

标签: haskell functor

在研究了基于MacLane,Awodey和Spivak书籍的类别理论之后,我试图了解Haskell中的免费/操作monad。

我们可以使用Control.Monad.FreeData.Functor.Coyoneda转换为带有Data.Functor.Coyoneda的仿函数,从而只使用数据类型获得monad,这是基于Yoneda引理的数学背景。

但我还没有完全理解,仿函数可以由GHC中的派生函数扩展自动生成,而不是依赖于Yoneda引理。

sed -r 's/[0-9]/\n/2g;:a;s/(([0-9]).*)\n/\1\2/;ta' file 相比,在GHC中使用派生仿函数是否有任何限制?

1 个答案:

答案 0 :(得分:8)

好问题!

CoyonedaDeriveFunctor执行不同的操作。 Coyoneda为任何参数选择创建一个新的独立数据类型,恰好是FunctorDeriveFunctor只为自己的 仿函数的类型生成样板代码。您只能为可以手动编写此类实例的类型派生Functor实例。

newtype Pred a = Pred (a -> Bool)作为一个(有点人为的)示例:没有instance Functor Pred因为Preda参数中是逆变的,所以DeriveFunctor赢了&# 39;能够帮助你。另一方面,Coyoneda PredFunctor因为Coyoneda fFunctor,但对于任何f来说都不是非常有用。

顺便说一下,Freer monadFreeCoyoneda的应用。