优化CCC

在岗位上过载λ,我给出了一个从类型化lambda演算到笛卡尔闭范畴(CCC)词汇表的翻译。这种简单的翻译会导致不必要的复杂表达式。例如,简单的lambda术语“λds→(λ(a,b)→(b,a))ds”,翻译成一个相当复杂的CCC术语:

应用∘(咖喱(应用(常数(,) △ (身份证件∘汇率)\8728»汇率)△(身份证件∘exl)\8728»exr)△身份证件)

(回忆起之前的帖子(∘)(△)(▽).)

然而,我们可以做得更好,翻译成

汇率△汇率

它表示将参数对的左右半配对,即交换。

本文应用了一些等式属性来大大简化/优化CCC格式的翻译结果,包括上面的示例。首先,我将展示等式推理,然后是如何在λ-ccc库。

继续阅读“优化CCC”»

过载λ

Haskell的类型类工具是一种强大的抽象机制。使用它,我们可以将多个解释重载到单个词汇表中,每个解释对应不同的类型。阶级法则限制了这些解释,并允许对所有(守法)实例有效的推理,即使是尚未定义的实例。

由于Haskell是Church(类型化)lambda演算遗产中的一种高阶函数语言,因此它也支持“lambda抽象”。

然而,遗憾的是,这两种抽象形式并没有结合在一起。当我们使用lambda抽象(“λx→λ“)和应用程序(”uv型“),我们的表达式只能解释为一种类型(构造函数),即函数。(请注意,我不是在谈论参数多态性,参数多态性可用于lambda抽象和type-class-style重载。)是否可以使用类型类重载lambda和应用程序,或者以相同的精神重载?答案是肯定的,这样做有一些很棒的好处。我将在这篇文章中解释如何,并暗示为什么,在未来的文章中详细阐述。

继续阅读“过载λ”»

从Haskell到硬件,通过笛卡尔闭合类别

自去年秋天以来,我一直在表格这家硅谷初创公司开发了一种创新的可编程硬件架构“Spacetime”,有点类似于FPGA,但更加灵活高效。2011年2月,我在海湾地区哈斯克尔马拉松(Bay Area Haskell Hackathon)上遇到了创始人史蒂夫·泰格(Steve Teig)。他描述了他的时空结构,该结构基于同名几何学,由赫尔曼·明科斯基(Hermann Minkowski)开发,以优雅地捕捉爱因斯坦的狭义相对论。在听到史蒂夫在干什么的头30秒左右,我知道我想帮忙。

史蒂夫与我分享的愿景不仅包括硬件设计器(用Verilog和VHDL等硬件语言编程),也是大规模并行执行软件用纯功能语言写的。最近,我主要致力于后一方面,特别是关于如何编译Haskell的问题。我们的计划是公开开发Haskell编译器并鼓励协作。如果你在这个博客系列中看到什么让你感兴趣,特别是如果你有什么建议或者你想在这个项目上合作,请告诉我。

在我的下一系列博客文章中,我将介绍一些我一直在研究的编译Haskell以实现大规模并行执行的技术思想。现在,我想介绍一个我用来解决这个问题的中心思想。

继续阅读“From Haskell to hardware via cartesian closed categories”»