haskell - 教会编码的实际原因

标签 haskell church-encoding

Church 编码(又名访客模式)是一种将数据表示为函数的方式:而不是

data T = C1 F1 F2 | C2 F3 F4

你可以定义
data T = T (forall r. (F1 -> F2 -> r) -> (F3 -> F4 -> r) -> r)

.尽管将任何东西表示为函数的能力很好,但我一直认为第一个版本更可取,因为它更简洁并且不需要语言扩展(显式 forall )。但是,您有时可以在公共(public)图书馆中找到教堂编码的数据。使用它有什么好处?

公共(public)图书馆中教堂编码的例子:
  • Iteratee
  • Revision control monad
  • (请帮我扩展列表)
  • 最佳答案

    这对应于 continuation-passing style具有多个延续,并且是为了性能而完成的:避免了数据的显式构造和破坏,而是直接根据模式匹配的输出传递控制,而后者将立即完成。这并不总能提高性能,但当它发生时,它可能相当重要。

    基本上,您可以将其视为数据与控制。如果您所做的事情本质上类似于控制——例如解析器的成功和失败分支——那么基于控制的表示可能会更好。否则,坚持数据。

    关于haskell - 教会编码的实际原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9806729/

    相关文章:

    haskell - 真实世界 Haskell,第 5 章,SimpleJSON 编译错误

    haskell - 在 Haskell 中将值渲染为项目和中间项目

    Church 平等编码的递归

    functional-programming - 是否可以创建泛型 ADT 的类型级表示?

    scheme - 教会数字算术

    performance - 为什么不能应用遍历数组? (或者是吗?)

    haskell - Yesod 中模板 haskell 的评估

    haskell - 理解签名中 `System.ZMQ4.Monadic` 的 `forall`

    haskell - 如何在 Haskell 中实现二进制数

    haskell - 如何在haskell中创建类的类型实例?