2013年9月13日下午05:27
在岗位上过载λ,我给出了一个从类型化lambda演算到笛卡尔闭范畴(CCC)词汇表的翻译。这种简单的翻译会导致不必要的复杂表达式。例如,简单的lambda术语“λds→(λ(a,b)→(b,a))ds
”,翻译成一个相当复杂的CCC术语:
应用∘(咖喱(应用(常数(,) △ (身份证件∘汇率)\8728»汇率)△(身份证件∘exl)\8728»exr)△身份证件)
(回忆起之前的帖子(∘)
比(△)
和(▽)
.)
然而,我们可以做得更好,翻译成
汇率△汇率
它表示将参数对的左右半配对,即交换。
本文应用了一些等式属性来大大简化/优化CCC格式的翻译结果,包括上面的示例。首先,我将展示等式推理,然后是如何在λ-ccc库。
继续阅读“优化CCC”»
在Overloading lambda之后,我给出了从类型化lambda演算到笛卡尔闭范畴(CCC)词汇表的翻译。这种简单的翻译会导致不必要的复杂表达。。。。
2013年9月13日上午08:31
Haskell的类型类工具是一种强大的抽象机制。使用它,我们可以将多个解释重载到单个词汇表中,每个解释对应不同的类型。阶级法则限制了这些解释,并允许对所有(守法)实例有效的推理,即使是尚未定义的实例。
由于Haskell是Church(类型化)lambda演算遗产中的一种高阶函数语言,因此它也支持“lambda抽象”。
然而,遗憾的是,这两种抽象形式并没有结合在一起。当我们使用lambda抽象(“λx→λ
“)和应用程序(”uv型
“),我们的表达式只能解释为一种类型(构造函数),即函数。(请注意,我不是在谈论参数多态性,参数多态性可用于lambda抽象和type-class-style重载。)是否可以使用类型类重载lambda和应用程序,或者以相同的精神重载?答案是肯定的,这样做有一些很棒的好处。我将在这篇文章中解释如何,并暗示为什么,在未来的文章中详细阐述。
继续阅读“过载λ”»
Haskell的类型类工具是一种强大的抽象机制。使用它,我们可以将多个解释重载到一个词汇表上,每个解释对应不同的类型。课堂。。。
2013年9月12日下午03:20
自去年秋天以来,我一直在表格这家硅谷初创公司开发了一种创新的可编程硬件架构“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”»
自去年秋天以来,我一直在Tabula工作,这是一家硅谷初创公司,开发一种创新的可编程硬件架构,名为“Spacetime”,有点类似于FPGA,但更多。。。