When You Should Use Lists in Haskell (Mostly, You Should Not)
我们评论函数式编程中列表的过度使用。在这方面,我们回顾了Haskell及其一些库的历史,并暗示了当前的发展。
2018-08-24 cs.PL
Live music programming in Haskell
我们的目标是以与多个参与者互动的方式创作算法音乐。为此,我们已经开发了一个解释器的子语言的非严格函数程序设计语言Haskell,允许修改程序在其执行过程中。我们的系统既可用于音乐现场编码,也可用于函数式编程的演示和教育。
2013-03-22 cs.PL cs.SD
HasTEE: Programming Trusted Execution Environments with Haskell
针对TEE现有编程模型需手动分区、依赖不安全底层库的问题,提出嵌入Haskell的DSL HasTEE,利用类型系统自动分区与信息流控制,以安全库形式实现且无需修改GHC,通过多案例验证了适用性。
2023-07-24 cs.PL
Destination-passing style programming: a Haskell implementation
本文提出在 Haskell 中基于 compact regions 与线性类型 API 实现目标传递风格编程,以兼顾内存安全与性能,并通过解析器示例证明大规模输入下内存和时间均降低 35%。
2023-12-18 cs.PL
Haskell meets Evariste
HASLab/ U.Minho \& INESC TEC Braga Portugal;HASLab/ U.Minho \& INESC TEC
本文探讨了通过易难分拆策略提升Haskell函数文档清晰度和概念设计的方法,并展示了其在程序分析与综合中的应用价值。
2026-02-18 cs.PL
HasChor: Functional Choreographic Programming for All (Functional Pearl)
本研究提出一种基于单子的函数式编排编程新模型,支持高阶与位置多态编排特性,并在Haskell库HasChor中实现,让普通Haskell开发者可便捷使用编排编程,且库实现简洁精炼。
2023-07-19 cs.PL
Book review "The Haskell Road to Logic, Maths and Programming"
Doets和van Eijck的教科书系统地将Haskell程序设计语言用于呈现逻辑和数学的主要部分。读者是通过章节的基本逻辑,证明食谱,集和列表,关系和职能,递归和共递归,一些系统,多项式和幂级数,结束康托的无穷大。这本书使用Haskell在声明式编程的层次上为各种数学概念的可执行和强类型表现。本书采用了系统但轻松的数学风格(定义,例子,练习,.);文本是非常愉快的阅读,由于少量的轶事信息,并由于事实上,定义是流畅地集成在运行的文本。这本书的一个重要目标是让读者熟悉程序的推理。
2006-06-22 cs.LO cs.PL
A Specification of Open Transactional Memory for Haskell
transmandemory(TM)已经成为一个有前途的抽象并发编程替代基于锁的同步。然而,大多数TM模型只允许隔离的事务,这在事务必须在提交之前通过共享数据进行交互的多线程编程中是不够的。在本文中,我们提出了开放式事务存储器(OTM),一个编程抽象支持安全,数据驱动的可组合的内存事务之间的相互作用。这是通过放松事务之间的隔离来实现的,仍然确保原子性:不同事务的线程可以通过访问共享变量进行交互,但随后它们的事务必须一起提交-实际上,这些事务是透明合并的。该模型允许松耦合的交互,因为事务合并仅由对共享数据的访问驱动,而不需要预先指定参与者。在本文中,我们提供了一个规范的OTM的设置并发Haskell,表明它是一个保守的扩展,目前的STM抽象。特别是,我们提供了一个正式的语义,这使我们能够证明OTM满足\emph{opacity}标准。
2016-02-17 cs.PL
A Purely Functional Computer Algebra System Embedded in Haskell
我们演示了如何在函数式编程方法可以用来实现一个计算机代数系统。作为概念验证,我们提出了计算代数包。它是一个计算机代数系统,在Haskell(一种纯函数式程序设计语言)中作为嵌入式领域特定语言实现。利用函数式编程的方法和Haskell的突出特性,该库同时实现了安全性,可组合性和正确性。为了证明我们的方法的优点,我们已经实现了先进的格罗布纳基算法,如Faugère的$F_4$和$F_5$,在一个可组合的方式。
2018-09-20 cs.PL cs.SC
Language-integrated provenance in Haskell
科学进步越来越依赖于数据管理,特别是清理和管理数据,以便系统地分析和重用数据。已经提出了大量用于管理和策展数据(及其出处)的技术,主要是在数据库社区中。特别是,一些有影响力的论文提出了收集出处信息,解释一段数据是从哪里复制的,或者使用了什么其他记录来获得它。然而,大多数这些技术只存在于研究原型中,并不适用于主流数据库系统。这意味着科学家们要么自己实施这些技术,要么(经常)不使用这些技术。这本质上是一个代码重用问题:起源技术目前不能被可重用地实现,只能作为标准数据库的临时、通常不维护的扩展。另一种相对未被探索的方法是在更高的抽象级别上支持这些技术,使用元编程或反射技术。先进的编程技术是否可以更容易地将起源研究成果转化为实践?我们建立在最近的一种方法,称为语言集成的出处,它扩展了语言集成的查询技术与源到源查询翻译记录出处。在以前的工作中,开发了一个研究程序设计语言的链接,支持复杂的Web和数据库编程的概念证明。在本文中,我们将展示如何在基于数据库支持的Haskell(DSH)库的Haskell构建中采用这种方法。尽管Haskell丰富的编程特性在原则上似乎已经足够了,但在Haskell中实现语言集成的起源需要克服许多技术挑战,因为这些功能之间存在交互。我们的实现作为一个概念的证明,展示了这种元编程功能的组合,第一次,使数据出处设施提供给程序员作为一个广泛使用的,通用的语言库。在我们的工…
2018-03-27 cs.PL
Live-Musikprogrammierung in Haskell
Institut für Informatik(信息学研究所);Martin-Luther-Universität Halle-Wittenberg(哈勒-维滕贝格马丁·路德大学)
我们的目标是以互动的方式与多个参与者一起创作算法音乐。为此,我们开发了一个解释器的子语言的非严格函数程序设计语言Haskell,允许在其执行过程中修改程序。我们的系统既可用于音乐现场编码,也可用于函数式编程的演示和教育。
2012-02-20 cs.PL cs.SD
Haskell's overlooked object system
Haskell提供了类型类绑定和参数多态性,而不是Java和OCaml等面向对象语言的子类型多态性。Haskell 98不带扩展、带普通扩展或带新扩展是否能完全支持传统的面向对象程序设计,包括封装、可变状态、继承、重写、静态检查、隐式和显式子类型等,这是一个有争议的问题。包括第一级词法作用域类、隐式多态类、灵活的多重继承、安全向下转换和安全协变参数。Haskell确实可以支持宽度和深度,结构和名义子类型。我们解决了保持Haskell的类型推断的特殊挑战,即使是对象和对象操作函数。面向对象特性在Haskell中作为OOHaskell库引入。OOHaskell适合作为类型化OO语言设计的沙箱。
2005-09-10 cs.PL
Learn Physics by Programming in Haskell
我们描述了一种方法,加深学生的理解基础物理,要求学生表达物理思想的功能程序设计语言。该方法是在黎巴嫩谷学院计算物理二年级课程实施。我们认为,牛顿力学的结构是澄清其表达的语言(Haskell),支持高阶函数,类型和类型类。在电磁理论中,计算电场和磁场的函数的类型特征清楚地表达了对产生场的电荷和电流分布的函数依赖性。基础物理学中的许多概念都可以用一个类型或一个函数很好地捕捉到。
2014-12-16 cs.CY cs.PL physics.ed-ph
Designing Walrus: Relational Programming with Rich Types, On-Demand Laziness, and Structured Traces
Galois, Inc.(Galois公司)
本研究提出嵌入Haskell的函数式关系语言Walrus,在miniKanren基础上扩展类型多态合一、按需惰性等特性,结合双向编译器开发经验阐述其设计实现与实践反思。
2025-10-28 cs.PL
PubSub implementation in Haskell with formal verification in Coq
在云中,该技术按需使用,而无需在桌面上安装任何东西。软件即服务是众多云架构之一。PubSub消息传递模式是一种基于云的软件即服务解决方案,用于复杂系统,特别是需要将消息从一个单元发送到另一个单元或多个单元的通知部分。Haskell是一种通用类型化程序设计语言,它开创了几种高级程序设计语言特性。基于λ演算系统,它属于函数式程序设计语言家族。Coq也是基于λ演算的严格版本,是一种程序设计语言,具有比Haskell更高级的类型系统,主要用于定理证明,即证明软件正确性。本文旨在展示如何将PubSub与云计算(软件即服务)结合使用,并提供Haskell中的示例实现和Coq中的正确性证明。
2020-05-18 cs.LO cs.PL cs.SE
Toward Hole-Driven Development with Liquid Haskell
Liquid Haskell是对Haskell程序设计语言的扩展,它增加了对细化类型的支持:用SMT可判定的逻辑谓词扩充的数据类型,这些逻辑谓词细化可以驻留在类型中的值集。此外,Liquid Haskell对精化反射的支持使Haskell能够用于通用的机械化定理证明。Liquid Haskell中越来越多的大规模机械化证明开发利用了这种能力。向Haskell这样的“遗留”语言添加定理证明功能,可以让程序员直接验证真实世界Haskell程序的属性(利用现有的高度调优的编译器,运行时系统和库),只需编写Haskell。然而,更成熟的证明助手,如Agda和Coq,为交互式证明开发和对证明状态的洞察提供了更好的支持(例如,为了完成部分完成的证明,还需要证明哪些子目标)。相反,Liquid Haskell只向用户提供粗粒度的反馈--要么报告类型错误,要么不报告--不幸的是,这阻碍了它作为定理证明器的可用性。在本文中,我们建议通过扩展对Agda风格类型化孔的支持和利用它们的交互式编辑命令来提高Liquid Haskell的可用性。在Agda中,类型化的洞允许程序员指出证明中未完成的部分,并在与编译器的对话中逐步完成证明。虽然GHC Haskell已经有了自己的受Agda启发的对类型化孔的支持,但我们认为,如果与Liquid Haskell的细化类型和SMT自动化相结合,类型化孔将特别强大和有用…
2021-10-09 cs.PL
Compiling Signal Processing Code embedded in Haskell via LLVM
Martin-Luther-Universität Halle-Wittenberg(哈雷-维滕贝格马丁·路德大学)
本文讨论了一种嵌入在函数式语言Haskell中,以底层虚拟机为后台的实时音频信号处理的程序设计语言。有了这个框架,我们可以用Haskell的舒适性和类型安全性来编码,同时实现快速内部循环和完全向量化的最大效率。这样,Haskell就成为专用信号处理语言的一个有价值的替代方案。
2011-04-13 cs.PL cs.SD
Evaluating Haskell expressions in a tutoring environment
许多Haskell的入门教科书从一开始就使用计算,让读者深入了解表达式的求值和函数式程序的行为。许多在函数式编程范式中很重要的编程概念,如递归、高阶函数、模式匹配和惰性求值,可以通过展示逐步计算来部分解释。如果学生自己执行这些评估步骤,她会更好地理解这些概念。目前缺乏对Haskell表达式求值的实验工具支持。在本文中,我们提出了一个原型实现的逐步评估Haskell表达式,支持多种评估策略,专门针对教育。除了执行评估步骤,该工具还诊断学生提交的步骤,并提供反馈。教师可以在不了解工具内部实现的情况下添加或更改函数定义。我们讨论了一些关于该工具的小调查的初步结果。
2014-12-16 cs.CY cs.PL
Tutorial implementation of Hoare logic in Haskell
使用程序设计语言Haskell,我们介绍了命题演算,数论和一个简单的命令式语言,可以评估算术和布尔表达式的实现。最后,我们提供了一个实现霍尔的逻辑,这将使我们能够推断事实的程序,而不需要一个完整的评估。
2021-12-26 cs.LO cs.PL
MultiChor: Census Polymorphic Choreographic Programming with Multiply Located Values
针对分布式并发编程的死锁检测与推理难题,提出Haskell库MultiChor,无需额外通信处理选择知识,且支持参与者数量多态的编排表达。
2024-06-19 cs.DC cs.PL
Why It's Nice to be Quoted: Quasiquoting for Prolog
Prolog对动态规划、Meta编程和使用上下文无关文法的文本处理的支持使得该语言非常适合于定义领域特定语言(DSL)以及分析、重构或生成其他(编程)语言中的表达式状态。众所周知的DSL是DCG(Definite Clause Grammar)表示法和约束语言,如CHR。这些扩展使用Prolog运算符声明和{...}符号来实现一个好的语法。当外部语言,如HTML、SQL或JavaScript进入画面时,操作符不再满足将这些语言的片段嵌入到Prolog源文件中。此外,Prolog对引用长文本片段的支持很差。Haskell引入了准引号来解决这个问题。在本文中,我们'移植'的Haskell机制,准引用的Prolog。我们表明,这是可以做到干净,准引用可以解决上述问题。
2013-08-19 cs.PL
Shallow EDSLs and Object-Oriented Programming: Beyond Simple Compositionality
嵌入式领域特定语言(Embedded Domain-Specific Languages,EDSL)是各种语言(包括Haskell和Scala)中常见且广泛使用的DSL方法。EDSL有两种主要的实现技术:浅嵌入和深嵌入。询问:浅嵌入非常简单,但在过去,它们因在模块化和重用方面非常有限而受到批评。特别是,经常有人认为在浅嵌入中支持多个DSL解释是困难的。方法:本文认为,浅层EDSL和面向对象编程(OOP)是密切相关的。Gibbons和Wu已经讨论了浅EDSL和过程抽象之间的关系,而Cook讨论了过程抽象和OOP之间的联系。本文中我们通过过程抽象将浅层EDSL直接连接到OOP来实现过渡步骤。关于这种关系的知识使我们能够改进EDSL的实现技术。知识:本文认为,共同的OOP机制(包括继承,子类型,类型细化)增加了模块化和重用的浅EDSL相比,经典的过程抽象,使一个简单的方法来表达多个,可能依赖,解释。基础:我们通过使用Gibbons和Wu的例子来进行论证,其中Haskell使用过程抽象来建模一个简单的浅EDSL。我们在Scala中重新编码EDSL,并使用改进的OO启发的Haskell编码。我们进一步说明了我们的方法与案例研究重构深外部SQL查询处理器,使其更加模块化,浅,嵌入式。重要性:这项工作之所以重要,有两个原因。首先,从知识的角度来看,这项工作建立了浅嵌入和面向对象程序设计之间的联系…
2019-02-01 cs.PL
Comparative Studies of 10 Programming Languages within 10 Diverse Criteria - a Team 10 COMP6411-S10 Term Report
这是一个关于程序设计语言的调查:C++,JavaScript,ANOJ,C#,Haskell,Java,PHP,Scala,Scheme和JavaScript。我们的调查工作涉及这十种程序设计语言的比较研究,以下标准:安全编程实践,Web应用程序开发,Web服务组合,基于OOP的抽象,反射,面向方面,函数式编程,声明式编程,批处理脚本和UI原型。我们在上述标准的背景下研究这些语言,以及它们为每个语言提供的支持水平。
2010-08-20 cs.PL
Strategic polymorphism requires just two combinators!
在以前的工作中,我们介绍了函数策略的概念:第一类通用函数,可以遍历任何类型的术语,同时混合统一和类型特定的行为。函数式策略将术语重写策略(包括遍历)的概念转移到函数式编程范式中。同时,提出了许多基于Haskell的模型和组合子套件,以支持具有函数式策略的泛型编程。在本文中,我们提供了一个紧凑和成熟的功能策略的重建。我们只通过两个原始的组合子来捕获策略多态性。这是在不承诺特定函数语言的情况下完成的。我们分析了功能策略实施模型的设计空间。为了完整起见,我们还提供了一个用于实现函数策略的操作参考模型(在Haskell中)。我们证明了我们的方法的一般性,通过重建的Strafunski库的功能策略的代表性片段。
2002-12-19 cs.PL
Comparative Studies of 10 Programming Languages within 10 Diverse Criteria -- a Team 7 COMP6411-S10 Term Report
当今世界上有很多种程序设计语言,每种语言都有其优点和缺点。在本文中,我们将讨论十种程序设计语言:C++,C#,Java,Groovy,JavaScript,PHP,Scheme,Haskell和Askell J。我们从十个不同的标准对这十种语言进行了总结和比较。例如,默认更安全的编程实践,Web应用程序开发,基于OO的抽象等,最后,我们将给出我们的结论,哪些语言是合适的,哪些是不适合在某些情况下使用。我们还将提供证据和我们的分析,为什么有些语言比其他语言更好,或者在某些标准上比其他语言更有优势。
2010-09-01 cs.PL
Structural Induction Principles for Functional Programmers
用户定义的递归类型是现代函数式程序设计语言(如Haskell、Clean和ML语言家族)的基本特征。由递归类型结构上的递归定义的程序的性质一般用递归类型上的结构归纳法来证明。如何从数据类型声明中生成结构归纳原理在定理证明领域是众所周知的。这些方法值得在函数式编程社区中更好地了解。现有的函数式编程教科书掩盖了这方面的内容。然而,如果函数式程序员不知道如何写出一个新类型的结构归纳原理,他们又该如何推理呢?在本文中,我们描述了一个算法,以产生结构归纳原则,从数据类型声明。我们还讨论了这些方法是如何在怀俄明大学的函数式编程课程中教授的。该算法的Haskell实现包含在附录中。
2013-12-10 cs.LO cs.PL
Affine Monads and Lazy Structures for Bayesian Programming
我们表明,流和懒惰的数据结构是一个自然的成语编程与无限维贝叶斯方法,如泊松过程,高斯过程,跳跃过程,狄利克雷过程,贝塔过程。受合成概率论发展的启发,关键的语义思想是处理两个独立的单子:一个支持懒惰的仿射概率单子,和一个不支持懒惰的可交换的非仿射测度单子。(仿射意味着$T(1)\cong 1$。)我们表明,分离是重要的,从可判定性的角度来看,最近的准Borel空间模型支持这两个单子。为了用这些例子进行贝叶斯推理,我们引入了新的推理方法,这些方法专门适用于懒惰,它们被证明是正确的参考大都会黑斯廷斯绿色方法。我们的理论开发是作为一个Haskell库,LazyPPL实现的。
2022-12-14 cs.PL
On the State of Coherence in the Land of Type Classes
本文考察Swift、Rust和Scala中类型类的一致性处理,并与Haskell对比,发现三者绕过实例唯一性限制的策略惊人相似。
2025-02-27 cs.PL
Language Support for Adaptation: Intent-Driven Programming in FAST
从历史上看,程序设计语言语义集中于为程序分配精确的数学含义。这个意义是一个从程序的输入域到输出域的函数,它完全由程序的句法结构决定。这样的语义促进了便携式应用的开发,该便携式应用不注意特定硬件和软件平台的性能特性和限制(诸如最大存储器占用)。本文介绍了意图驱动编程的思想,其中程序的含义还取决于一个附带的意图规范,表示如何在执行过程中动态修改普通程序的含义,以满足意图所表达的附加属性。这些包括两种内涵属性-例如,资源使用-和扩展属性-例如,计算答案的准确性。为了证明意图驱动编程模型的价值,本文提出了一种通用意图驱动的程序设计语言--称为FAST--作为Swift的扩展实现。FAST由一个意图编译器、一个分析器、一个通用控制器接口和一个运行时模块组成,该模块支持与传统C/C++代码的互操作。与现有的自适应计算框架相比,\FAST{}支持对操作环境和意图本身的变化进行动态适应,并支持混合过程控制和基于反馈和优化的控制。
2019-07-12 cs.PL
Event-driven Adaptation in COP
面向上下文的程序设计语言为我们提供了原始的结构,以适应程序的行为取决于其操作环境,即上下文的演变。在以前的工作中,我们提出了ML_CoDa,一个面向上下文的语言,有两个组件:一个声明性的成分编程的上下文和一个功能的计算。本文描述了ML_CoDa的扩展,以处理异步事件通知的不可预测的上下文更改的适应。
2016-06-20 cs.PL
Extending Isabelle/HOL's Code Generator with support for the Go programming language
本工作为Isabelle/HOL的代码生成器新增Go语言作为第五种目标语言,通过命令式构造模拟函数式特性,并以附加库形式提供支持。
2024-09-19 cs.LO cs.PL
Compiling the Mimosa programming language to RTOS tasks
Uppsala University(乌普萨拉大学);Univ. Grenoble Alpes, CNRS, Grenoble INP, VERIMAG(格勒诺布尔阿尔卑斯大学、法国国家科学研究中心、格勒诺布尔理工学院、VERIMAG);University of Regensburg(雷根斯堡大学)
本文提出将Mimosa语言程序编译为RTOS任务的方案,基于MIMOS模型,通过适配Lustre编译方案,将协调层映射到实时操作系统原语。
2025-10-23 cs.PL
Auto-COP: Adaptation Generation in Context-Oriented Programming using Reinforcement Learning Options
Universidad de los Andes(洛斯安第斯大学);Trinity College Dublin(都柏林圣三一学院)
Auto-COP利用强化学习选项在运行时生成COP适应,解决复杂CPS中设计时定义适应的难题,通过驾驶助手和机器人配送案例验证其正确性并使执行步骤减半。
2023-08-03 cs.AI cs.PL cs.SE
Compiler-Guided Inference-Time Adaptation: Improving GPT-5 Programming Performance in Idris
Ming Hsieh Department of Electrical and Computer Engineering(明希斯部门电子与计算机工程系);Viterbi School of Engineering, University of Southern California(维特比工程学院,南加州大学)
本文研究GPT-5通过编译器反馈提升在低资源语言Idris中的编程性能,发现结合本地编译错误的改进策略显著提高了模型表现。
2026-02-12 cs.AI cs.PL
Open Programming Language Interpreters
内容:本文提出了开放式程序设计语言解释器的概念,并实现了一个框架级元对象协议(MOP)来支持它们。询价:我们解决了动态解释器适应的问题,以调整解释器的行为上的任务要解决的问题,并引入新的功能,以满足不可预见的要求。许多语言都提供了在某种程度上支持反射的MOP。然而,MOP通常是特定于语言的,它们的反射功能通常受到限制,并且适配和应用逻辑通常是混合的,这使得对源代码的理解和维护变得困难。我们的系统克服了这些限制。方法:我们设计并实现了一个支持开放式程序设计语言解释器的系统。原型实现集成在Neverlang框架中。该系统公开了任何基于Neverlang的解释器的结构、行为和运行时状态,并能够对其进行修改。知识:我们的系统提供了对解释器的结构、行为和运行时状态的完全控制。该方法适用于所有基于Neverlang的解释器。适配代码可以在不同的语言实现中重用。基础:有了原型实现,我们专注于可行性评估。该文件表明,我们的方法很好地解决了研究文献中常见的问题。我们有一个演示视频和例子,说明我们的方法动态软件自适应,面向方面的编程,调试和上下文感知解释器。重要性:据我们所知,我们的论文提出了针对语言发展的一般框架的第一种反思方法。我们的系统免费为任何基于Neverlang的解释器提供完全的反射支持。我们不知道任何开放式实现在本文定义的意义上的程序设计语言解释器的先前应用。而不是替代其他方法,我们相信…
2017-03-31 cs.PL cs.SE
The Three Pillars of Machine Programming
Intel Labs(英特尔实验室);MIT(麻省理工学院)
在这份立场文件中,我们通过对三大研究支柱的分类检查来描述我们对机器编程未来的愿景。这些支柱是:(i)意图,(ii)发明,(iii)适应。意图强调人与计算机和计算机与机器学习接口的进步。发明强调通过机器学习(ML)创建或改进算法或核心硬件和软件构建块。适应强调在使用基于ML的构造来自主地演化软件方面的进步。
2021-06-26 cs.AI cs.PL cs.SE