16得票2回答
为什么我们使用folds将数据类型编码为函数?

具体而言,为什么我们使用foldr来编码列表,使用迭代来编码数字? 抱歉我的介绍有些冗长,但我不知道如何命名我想要询问的东西,所以我需要先进行一些阐述。这主要参考了C.A.McCann的这篇文章,但它并没有完全满足我的好奇心,同时我也会略显地讲解rank-n-types和无限懒加载的问题。 ...

13得票3回答
更高效的 Church 编码列表尾部

这是一篇关于Haskell的文章。只需将其保存为“ChurchList.lhs”即可运行。 > {-# LANGUAGE Rank2Types #-} 一个 Church 编码列表是一种通过函数表示列表的方式。它类似于折叠和续传风格。 > newtype ChurchLis...

11得票4回答
如何使用 Church 编码实现自由 Monad?

我一直在使用free包中的Control.Monad.Free中的Free数据类型。现在我想将其转换为Control.Monad.Free.Church中的F,但无法弄清楚如何映射函数。 例如,使用Free的简单模式匹配函数如下: -- Pattern match Free matchFr...

10得票2回答
为什么显式的forall量词对于rank-n类型是必要的?

当我声明这个新类型时:newtype ListScott a = ListScott { unconsScott :: (a -> ListScott a -> r) -> r -> r } 这将定义一个假设的二阶类型 ListScott :: ((a -...