首页 > 最新文献

ACM SIGPLAN Symposium/Workshop on Haskell最新文献

英文 中文
The architecture of the Utrecht Haskell compiler Utrecht Haskell编译器的体系结构
Pub Date : 2009-09-03 DOI: 10.1145/1596638.1596650
A. Dijkstra, Jeroen D. Fokker, S. Swierstra
In this paper we describe the architecture of the Utrecht Haskell Compiler (UHC). UHC is a new Haskell compiler, that supports most (but not all) Haskell 98 features, plus some experimental extensions. It targets multiple backends, including a bytecode interpreter backend and a whole-program analysis backend, both via C. The implementation is rigorously organized as stepwise transformations through some explicit intermediate languages. The tree walks of all transformations are expressed as an algebra, with the aid of an Attribute Grammar based preprocessor. The compiler is just one materialization of a framework that supports experimentation with language variants, thanks to an aspect-oriented internal organization.
本文描述了Utrecht Haskell编译器(UHC)的体系结构。UHC是一个新的Haskell编译器,它支持大部分(但不是全部)Haskell 98的特性,加上一些实验性的扩展。它针对多个后端,包括字节码解释器后端和整个程序分析后端,它们都是通过c语言实现的。实现通过一些显式的中间语言严格组织为逐步转换。在基于属性语法的预处理器的帮助下,所有转换的树行都表示为代数。由于面向方面的内部组织,编译器只是支持对语言变体进行实验的框架的一个具体化。
{"title":"The architecture of the Utrecht Haskell compiler","authors":"A. Dijkstra, Jeroen D. Fokker, S. Swierstra","doi":"10.1145/1596638.1596650","DOIUrl":"https://doi.org/10.1145/1596638.1596650","url":null,"abstract":"In this paper we describe the architecture of the Utrecht Haskell Compiler (UHC).\u0000 UHC is a new Haskell compiler, that supports most (but not all) Haskell 98 features, plus some experimental extensions. It targets multiple backends, including a bytecode interpreter backend and a whole-program analysis backend, both via C. The implementation is rigorously organized as stepwise transformations through some explicit intermediate languages. The tree walks of all transformations are expressed as an algebra, with the aid of an Attribute Grammar based preprocessor. The compiler is just one materialization of a framework that supports experimentation with language variants, thanks to an aspect-oriented internal organization.","PeriodicalId":188691,"journal":{"name":"ACM SIGPLAN Symposium/Workshop on Haskell","volume":"35 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2009-09-03","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125365035","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 51
Tool support for refactoring functional programs 对重构函数式程序的工具支持
Pub Date : 2008-10-19 DOI: 10.1145/871895.871899
Huiqing Li, S. Thompson
Refactorings are source-to-source program transformations which change program structure and organisation, but not program functionality. Documented in catalogues and supported by tools, refactoring provides the means to adapt and improve the design of existing code, and has thus enabled the trend towards modern agile software development processes. Refactoring has taken a prominent place in software development and maintenance, but most of this recent success has taken place in the OO and XP communities.In our project, we explore the prospects for 'Refactoring Functional Programs', taking Haskell as a concrete case-study. This paper discusses the variety of pragmatic and implementation issues raised by our work on the Haskell Refactorer. We briefly introduce the ideas behind refactoring, and a set of elementary functional refactorings. The core of the paper then outlines the main challenges that arise from our aim to produce practical tools for a decidedly non-toy language, summarizes our experience in trying to establish the necessary meta-programming infrastructure and gives an implementation overview of our current prototype refactoring tool. Using Haskell as our implementation language, we also offer some preliminary comments on Haskell programming-in-the-large.
重构是源到源的程序转换,它改变程序的结构和组织,但不改变程序的功能。重构被记录在目录中,并得到工具的支持,它提供了适应和改进现有代码设计的方法,从而使现代敏捷软件开发过程成为可能。重构在软件开发和维护中占据了重要的位置,但是最近的成功大多发生在OO和XP社区。在我们的项目中,我们以Haskell作为具体的案例研究,探讨了“重构函数式程序”的前景。本文讨论了我们在Haskell Refactorer上的工作中提出的各种实用问题和实现问题。我们简要介绍了重构背后的思想,以及一组基本的函数重构。然后,本文的核心部分概述了我们为非玩具语言开发实用工具的目标所带来的主要挑战,总结了我们在尝试建立必要的元编程基础设施方面的经验,并给出了我们当前原型重构工具的实现概述。使用Haskell作为我们的实现语言,我们还提供了一些关于Haskell整体编程的初步评论。
{"title":"Tool support for refactoring functional programs","authors":"Huiqing Li, S. Thompson","doi":"10.1145/871895.871899","DOIUrl":"https://doi.org/10.1145/871895.871899","url":null,"abstract":"Refactorings are source-to-source program transformations which change program structure and organisation, but not program functionality. Documented in catalogues and supported by tools, refactoring provides the means to adapt and improve the design of existing code, and has thus enabled the trend towards modern agile software development processes. Refactoring has taken a prominent place in software development and maintenance, but most of this recent success has taken place in the OO and XP communities.In our project, we explore the prospects for 'Refactoring Functional Programs', taking Haskell as a concrete case-study. This paper discusses the variety of pragmatic and implementation issues raised by our work on the Haskell Refactorer. We briefly introduce the ideas behind refactoring, and a set of elementary functional refactorings. The core of the paper then outlines the main challenges that arise from our aim to produce practical tools for a decidedly non-toy language, summarizes our experience in trying to establish the necessary meta-programming infrastructure and gives an implementation overview of our current prototype refactoring tool. Using Haskell as our implementation language, we also offer some preliminary comments on Haskell programming-in-the-large.","PeriodicalId":188691,"journal":{"name":"ACM SIGPLAN Symposium/Workshop on Haskell","volume":"8 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-10-19","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"117276504","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 74
Haskell, do you read me?: constructing and composing efficient top-down parsers at runtime 哈斯克尔,你听到了吗?:在运行时构建和组合高效的自顶向下解析器
Pub Date : 2008-09-25 DOI: 10.1145/1411286.1411296
Marcos Viera, S. Swierstra, Eelco Lempsink
The Haskell definition and implementation of read is far from perfect. In the first place read is not able to handle the associativities defined for infix operators. Furthermore, it puts constraints on the way show is defined, and especially forces it to generate far more parentheses than expected. Lastly, it may give rise to exponential parsing times. All this is due to the compositionality requirement for read functions, which imposes a top-down parsing strategy. We propose a different approach, based on typed abstract syntax, in which grammars describing the data types are composed dynamically. Using the transformation libraries described in a companion paper these syntax descriptions are combined and transformed into parsers at runtime, from which the required read function are constructed. In this way we obtain linear parsing times, achieve consistency with the defined associativities, and may use a version of show which generates far fewer parentheses, thus improving readability of printed values. The described transformation algorithms can be incorporated in a Haskell compiler, thus moving most of the work involved to compile time.
read的Haskell定义和实现还远远不够完美。首先,read不能处理为中缀操作符定义的关联。此外,它对show的定义方式施加了约束,特别是迫使它生成比预期多得多的括号。最后,它可能会导致指数级的解析时间。所有这些都是由于read函数的组合性需求,这就要求采用自顶向下的解析策略。我们提出了一种不同的方法,基于类型化抽象语法,其中描述数据类型的语法是动态组合的。使用同伴论文中描述的转换库,将这些语法描述组合起来,并在运行时转换为解析器,从中构造所需的读取函数。通过这种方式,我们获得线性解析时间,实现与定义的关联的一致性,并且可以使用生成更少括号的show版本,从而提高打印值的可读性。所描述的转换算法可以合并到Haskell编译器中,从而将所涉及的大部分工作转移到编译时间。
{"title":"Haskell, do you read me?: constructing and composing efficient top-down parsers at runtime","authors":"Marcos Viera, S. Swierstra, Eelco Lempsink","doi":"10.1145/1411286.1411296","DOIUrl":"https://doi.org/10.1145/1411286.1411296","url":null,"abstract":"The Haskell definition and implementation of read is far from perfect. In the first place read is not able to handle the associativities defined for infix operators. Furthermore, it puts constraints on the way show is defined, and especially forces it to generate far more parentheses than expected. Lastly, it may give rise to exponential parsing times. All this is due to the compositionality requirement for read functions, which imposes a top-down parsing strategy.\u0000 We propose a different approach, based on typed abstract syntax, in which grammars describing the data types are composed dynamically. Using the transformation libraries described in a companion paper these syntax descriptions are combined and transformed into parsers at runtime, from which the required read function are constructed. In this way we obtain linear parsing times, achieve consistency with the defined associativities, and may use a version of show which generates far fewer parentheses, thus improving readability of printed values.\u0000 The described transformation algorithms can be incorporated in a Haskell compiler, thus moving most of the work involved to compile time.","PeriodicalId":188691,"journal":{"name":"ACM SIGPLAN Symposium/Workshop on Haskell","volume":"84 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116073417","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 13
Lightweight monadic regions 轻量级单元区域
Pub Date : 2008-09-25 DOI: 10.1145/1411286.1411288
O. Kiselyov, Chung-chieh Shan
We present Haskell libraries that statically ensure the safe use of resources such as file handles. We statically prevent accessing an already closed handle or forgetting to close it. The libraries can be trivially extended to other resources such as database connections and graphic contexts. Because file handles and similar resources are scarce, we want to not just assure their safe use but further deallocate them soon after they are no longer needed. Relying on Fluet and Morrisett's [4] calculus of nested regions, we contribute a novel, improved, and extended implementation of the calculus in Haskell, with file handles as resources. Our library supports region polymorphism and implicit region subtyping, along with higher-order functions, mutable state, recursion, and run-time exceptions. A program may allocate arbitrarily many resources and dispose of them in any order, not necessarily LIFO. Region annotations are part of an expression's inferred type. Our new Haskell encoding of monadic regions as monad transformers needs no witness terms. It assures timely deallocation even when resources have markedly different lifetimes and the identity of the longest-living resource is determined only dynamically. For contrast, we also implement a Haskell library for manual resource management, where deallocation is explicit and safety is assured by a form of linear types. We implement the linear typing in Haskell with the help of phantom types and a parameterized monad to statically track the type-state of resources.
我们提供的Haskell库可以静态地确保资源(如文件句柄)的安全使用。我们静态地防止访问已经关闭的句柄或忘记关闭它。这些库可以简单地扩展到其他资源,如数据库连接和图形上下文。因为文件句柄和类似的资源是稀缺的,所以我们不仅要确保它们的安全使用,还要在不再需要它们之后尽快重新分配它们。依靠Fluet和Morrisett的[4]嵌套区域演算,我们在Haskell中贡献了一种新颖的、改进的和扩展的演算实现,以文件句柄作为资源。我们的库支持区域多态性和隐式区域子类型,以及高阶函数、可变状态、递归和运行时异常。程序可以分配任意数量的资源,并以任意顺序处理它们,不一定是后进先出。区域注释是表达式推断类型的一部分。我们的单元区域的新Haskell编码作为单元转换器不需要见证项。即使资源具有明显不同的生命周期,并且寿命最长的资源的身份仅动态确定,它也可以确保及时的重新分配。相比之下,我们还实现了一个用于手动资源管理的Haskell库,其中的释放是显式的,并且通过线性类型的形式保证了安全性。我们在Haskell中使用幻影类型和参数化单子来实现线性类型,以静态跟踪资源的类型状态。
{"title":"Lightweight monadic regions","authors":"O. Kiselyov, Chung-chieh Shan","doi":"10.1145/1411286.1411288","DOIUrl":"https://doi.org/10.1145/1411286.1411288","url":null,"abstract":"We present Haskell libraries that statically ensure the safe use of resources such as file handles. We statically prevent accessing an already closed handle or forgetting to close it. The libraries can be trivially extended to other resources such as database connections and graphic contexts.\u0000 Because file handles and similar resources are scarce, we want to not just assure their safe use but further deallocate them soon after they are no longer needed. Relying on Fluet and Morrisett's [4] calculus of nested regions, we contribute a novel, improved, and extended implementation of the calculus in Haskell, with file handles as resources.\u0000 Our library supports region polymorphism and implicit region subtyping, along with higher-order functions, mutable state, recursion, and run-time exceptions. A program may allocate arbitrarily many resources and dispose of them in any order, not necessarily LIFO. Region annotations are part of an expression's inferred type.\u0000 Our new Haskell encoding of monadic regions as monad transformers needs no witness terms. It assures timely deallocation even when resources have markedly different lifetimes and the identity of the longest-living resource is determined only dynamically.\u0000 For contrast, we also implement a Haskell library for manual resource management, where deallocation is explicit and safety is assured by a form of linear types. We implement the linear typing in Haskell with the help of phantom types and a parameterized monad to statically track the type-state of resources.","PeriodicalId":188691,"journal":{"name":"ACM SIGPLAN Symposium/Workshop on Haskell","volume":"62 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116087519","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 35
Language and program design for functional dependencies 功能依赖的语言和程序设计
Pub Date : 2008-09-25 DOI: 10.1145/1411286.1411298
Mark P. Jones, Iavor S. Diatchki
Eight years ago, functional dependencies, a concept from the theory of relational databases, were proposed as a mechanism for avoiding common problems with multiple parameter type classes in Haskell. In this context, functional dependencies give programmers a means to specify the semantics of a type class more precisely, and to obtain more accurate inferred types as a result. As time passed, however, several issues were uncovered - both in the design of a language to support functional dependencies, and in the ways that programmers use them - that led some to search for new, better alternatives. This paper focusses on two related aspects of design for functional dependencies: (i) the design of language/type system extensions that implement them; and (ii) the design of programs that use them. Our goal is to clarify the issues of what functional dependencies are, how they should be used, and how the problems encountered with initial proposals and implementations can be addressed.
八年前,函数依赖(函数依赖是关系数据库理论中的一个概念)作为一种机制被提出,用于避免Haskell中使用多参数类型类时出现的常见问题。在这种情况下,函数依赖关系为程序员提供了一种更精确地指定类型类语义的方法,从而获得更准确的推断类型。然而,随着时间的推移,一些问题被发现——既存在于支持函数依赖的语言设计中,也存在于程序员使用它们的方式中——这导致一些人开始寻找新的、更好的替代方案。本文主要关注功能依赖设计的两个相关方面:(i)实现它们的语言/类型系统扩展的设计;以及(ii)使用它们的程序设计。我们的目标是澄清功能依赖是什么,应该如何使用它们,以及如何解决初始建议和实现中遇到的问题。
{"title":"Language and program design for functional dependencies","authors":"Mark P. Jones, Iavor S. Diatchki","doi":"10.1145/1411286.1411298","DOIUrl":"https://doi.org/10.1145/1411286.1411298","url":null,"abstract":"Eight years ago, functional dependencies, a concept from the theory of relational databases, were proposed as a mechanism for avoiding common problems with multiple parameter type classes in Haskell. In this context, functional dependencies give programmers a means to specify the semantics of a type class more precisely, and to obtain more accurate inferred types as a result. As time passed, however, several issues were uncovered - both in the design of a language to support functional dependencies, and in the ways that programmers use them - that led some to search for new, better alternatives.\u0000 This paper focusses on two related aspects of design for functional dependencies: (i) the design of language/type system extensions that implement them; and (ii) the design of programs that use them. Our goal is to clarify the issues of what functional dependencies are, how they should be used, and how the problems encountered with initial proposals and implementations can be addressed.","PeriodicalId":188691,"journal":{"name":"ACM SIGPLAN Symposium/Workshop on Haskell","volume":"21 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129460308","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 24
Making monads first-class with template haskell 用模板haskell使单子一流
Pub Date : 2008-09-25 DOI: 10.1145/1411286.1411300
Pericles S. Kariotis, A. Procter, W. Harrison
Monads as an organizing principle for programming and semantics are notoriously difficult to grasp, yet they are a central and powerful abstraction in Haskell. This paper introduces a domain-specific language, MonadLab, that simplifies the construction of monads, and describes its implementation in Template Haskell. MonadLab makes monad construction truly first class, meaning that arcane theoretical issues with respect to monad transformers are completely hidden from the programmer. The motivation behind the design of MonadLab is to make monadic programming in Haskell simpler while providing a tool for non-Haskell experts that will assist them in understanding this powerful abstraction.
monad作为编程和语义的组织原则是出了名的难以掌握,但它们是Haskell中一个核心且强大的抽象。本文介绍了一种领域专用语言MonadLab,它简化了monad的构造,并描述了它在Template Haskell中的实现。MonadLab使monad构造真正成为一流的,这意味着与monad转换器相关的晦涩的理论问题对程序员完全隐藏起来。MonadLab设计背后的动机是使Haskell中的一元编程更简单,同时为非Haskell专家提供一个工具,帮助他们理解这种强大的抽象。
{"title":"Making monads first-class with template haskell","authors":"Pericles S. Kariotis, A. Procter, W. Harrison","doi":"10.1145/1411286.1411300","DOIUrl":"https://doi.org/10.1145/1411286.1411300","url":null,"abstract":"Monads as an organizing principle for programming and semantics are notoriously difficult to grasp, yet they are a central and powerful abstraction in Haskell. This paper introduces a domain-specific language, MonadLab, that simplifies the construction of monads, and describes its implementation in Template Haskell. MonadLab makes monad construction truly first class, meaning that arcane theoretical issues with respect to monad transformers are completely hidden from the programmer. The motivation behind the design of MonadLab is to make monadic programming in Haskell simpler while providing a tool for non-Haskell experts that will assist them in understanding this powerful abstraction.","PeriodicalId":188691,"journal":{"name":"ACM SIGPLAN Symposium/Workshop on Haskell","volume":"30 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128113036","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 5
Clase: cursor library for a structured editor 类:用于结构化编辑器的光标库
Pub Date : 2008-09-25 DOI: 10.1145/1411286.1411302
T. O. R. Allwood, S. Eisenbach
The zipper is a well known design pattern for providing a cursor-like interface to a data structure. However, the classic treatise by Huet (1) only scratches the surface of some of the potential applications of the zipper. In this work we have taken inspiration from Huet, and built a library suitable as an underpinning for a structured editor for programming languages. We consider a zipper structure that is suitable for traversing heterogeneous data types, encoding routes to other places in the tree (for bookmark or quick-jump functionality), expressing lexically bound information using contexts, and traversals for rendering a program indicating where the cursor is currently focused in the whole.
拉链是一种众所周知的设计模式,用于为数据结构提供类似光标的接口。然而,Huet(1)的经典论文只触及了拉链的一些潜在应用的表面。在这项工作中,我们从Huet那里获得了灵感,并构建了一个适合作为编程语言结构化编辑器基础的库。我们考虑一种拉链结构,它适合遍历异构数据类型、编码到树中其他位置的路由(用于书签或快速跳转功能)、使用上下文表示词法绑定的信息,以及遍历用于呈现指示光标当前集中在整体中的位置的程序。
{"title":"Clase: cursor library for a structured editor","authors":"T. O. R. Allwood, S. Eisenbach","doi":"10.1145/1411286.1411302","DOIUrl":"https://doi.org/10.1145/1411286.1411302","url":null,"abstract":"The zipper is a well known design pattern for providing a cursor-like interface to a data structure. However, the classic treatise by Huet (1) only scratches the surface of some of the potential applications of the zipper. In this work we have taken inspiration from Huet, and built a library suitable as an underpinning for a structured editor for programming languages. We consider a zipper structure that is suitable for traversing heterogeneous data types, encoding routes to other places in the tree (for bookmark or quick-jump functionality), expressing lexically bound information using contexts, and traversals for rendering a program indicating where the cursor is currently focused in the whole.","PeriodicalId":188691,"journal":{"name":"ACM SIGPLAN Symposium/Workshop on Haskell","volume":"24 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126595323","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 2
Haskell: batteries included Haskell:包括电池
Pub Date : 2008-09-25 DOI: 10.1145/1411286.1411303
Duncan Coutts, Isaac Potoczny-Jones, Don Stewart
The quality of a programming language itself is only one component in the ability of application writers to get the job done. Programming languages can succeed or fail based on the breadth and quality of their library collection. Over the last few years, the Haskell community has risen to the task of building the library infrastructure necessary for Haskell to succeed as a programming language suitable for writing real-world applications. This on-going work, the Cabal and Hackage effort, is built on the open source model of distributed development, and have resulted in a flowering of development in the language with more code produced and reused now than at any point in the community's history. It is easier to obtain and use Haskell code, in a wider range of environments, than ever before. This demonstration describes the infrastructure and process of Haskell development inside the Cabal/Hackage framework, including the build system, library dependency resolution, centralised publication, documentation and distribution, and how the code escapes outward into the wider software community. We survey the benefits and trade-offs in a distributed, collaborative development ecosystem and look at a proposed Haskell Platform that envisages a complete Haskell development environment, batteries included.
编程语言本身的质量只是应用程序编写人员完成工作能力的一个组成部分。编程语言的成功或失败取决于其库集合的广度和质量。在过去的几年里,Haskell社区已经承担起了构建库基础设施的任务,这些基础设施是Haskell成功成为一种适合编写实际应用程序的编程语言所必需的。Cabal和Hackage正在进行的工作是建立在分布式开发的开源模型上的,并且已经导致了该语言开发的繁荣,现在产生和重用的代码比社区历史上任何时候都多。在更广泛的环境中获取和使用Haskell代码比以往任何时候都更容易。这个演示描述了在Cabal/Hackage框架内的Haskell开发的基础设施和过程,包括构建系统、库依赖解析、集中发布、文档和分发,以及代码如何向外转移到更广泛的软件社区。我们调查了分布式协作开发生态系统的优点和缺点,并研究了一个提议的Haskell平台,该平台设想了一个完整的Haskell开发环境,包括电池。
{"title":"Haskell: batteries included","authors":"Duncan Coutts, Isaac Potoczny-Jones, Don Stewart","doi":"10.1145/1411286.1411303","DOIUrl":"https://doi.org/10.1145/1411286.1411303","url":null,"abstract":"The quality of a programming language itself is only one component in the ability of application writers to get the job done. Programming languages can succeed or fail based on the breadth and quality of their library collection. Over the last few years, the Haskell community has risen to the task of building the library infrastructure necessary for Haskell to succeed as a programming language suitable for writing real-world applications.\u0000 This on-going work, the Cabal and Hackage effort, is built on the open source model of distributed development, and have resulted in a flowering of development in the language with more code produced and reused now than at any point in the community's history. It is easier to obtain and use Haskell code, in a wider range of environments, than ever before.\u0000 This demonstration describes the infrastructure and process of Haskell development inside the Cabal/Hackage framework, including the build system, library dependency resolution, centralised publication, documentation and distribution, and how the code escapes outward into the wider software community.\u0000 We survey the benefits and trade-offs in a distributed, collaborative development ecosystem and look at a proposed Haskell Platform that envisages a complete Haskell development environment, batteries included.","PeriodicalId":188691,"journal":{"name":"ACM SIGPLAN Symposium/Workshop on Haskell","volume":"6 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"123791558","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 12
Smallcheck and lazy smallcheck: automatic exhaustive testing for small values Smallcheck和lazy Smallcheck:小值的自动穷举测试
Pub Date : 2008-09-25 DOI: 10.1145/1411286.1411292
C. Runciman, Matthew Naylor, Fredrik Lindblad
This paper describes two Haskell libraries for property-based testing. Following the lead of QuickCheck, these testing libraries SmallCheck and Lazy SmallCheck also use type-based generators to obtain test-sets of finite values for which properties are checked, and report any counter-examples found. But instead of using a sample of randomly generated values they test properties for all values up to some limiting depth, progressively increasing this limit. The paper explains the design and implementation of both libraries and evaluates them in comparison with each other and with QuickCheck.
本文描述了用于基于属性的测试的两个Haskell库。在QuickCheck的引导下,这些测试库SmallCheck和Lazy SmallCheck也使用基于类型的生成器来获取被检查属性的有限值的测试集,并报告发现的任何反例。但是,他们并没有使用随机生成的值样本来测试所有值的属性,直到某个极限深度,并逐渐增加这个极限。本文解释了这两个库的设计和实现,并对它们进行了比较和与QuickCheck的比较。
{"title":"Smallcheck and lazy smallcheck: automatic exhaustive testing for small values","authors":"C. Runciman, Matthew Naylor, Fredrik Lindblad","doi":"10.1145/1411286.1411292","DOIUrl":"https://doi.org/10.1145/1411286.1411292","url":null,"abstract":"This paper describes two Haskell libraries for property-based testing. Following the lead of QuickCheck, these testing libraries SmallCheck and Lazy SmallCheck also use type-based generators to obtain test-sets of finite values for which properties are checked, and report any counter-examples found. But instead of using a sample of randomly generated values they test properties for all values up to some limiting depth, progressively increasing this limit. The paper explains the design and implementation of both libraries and evaluates them in comparison with each other and with QuickCheck.","PeriodicalId":188691,"journal":{"name":"ACM SIGPLAN Symposium/Workshop on Haskell","volume":"8 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127634898","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 213
Not all patterns, but enough: an automatic verifier for partial but sufficient pattern matching 不是所有的模式,但足够:部分但足够的模式匹配的自动验证器
Pub Date : 2008-09-25 DOI: 10.1145/1411286.1411293
Neil Mitchell, C. Runciman
We describe an automated analysis of Haskell 98 programs to check statically that, despite the possible use of partial (or non-exhaustive) pattern matching, no pattern-match failure can occur. Our method is an iterative backward analysis using a novel form of pattern-constraint to represent sets of data values. The analysis is defined for a core first-order language to which Haskell 98 programs are reduced. Our analysis tool has been successfully applied to a range of programs, and our techniques seem to scale well. Throughout the paper, methods are represented much as we have implemented them in practice, again in Haskell.
我们描述了对Haskell 98程序的自动分析,以静态地检查,尽管可能使用部分(或非详尽的)模式匹配,但不会发生模式匹配失败。我们的方法是使用一种新的模式约束形式来表示数据值集的迭代向后分析。该分析是为Haskell 98程序简化的核心一阶语言定义的。我们的分析工具已经成功地应用到一系列的程序中,而且我们的技术似乎具有良好的可扩展性。在整篇论文中,方法都是按照我们在实践中实现的方式来表示的,同样是在Haskell中。
{"title":"Not all patterns, but enough: an automatic verifier for partial but sufficient pattern matching","authors":"Neil Mitchell, C. Runciman","doi":"10.1145/1411286.1411293","DOIUrl":"https://doi.org/10.1145/1411286.1411293","url":null,"abstract":"We describe an automated analysis of Haskell 98 programs to check statically that, despite the possible use of partial (or non-exhaustive) pattern matching, no pattern-match failure can occur. Our method is an iterative backward analysis using a novel form of pattern-constraint to represent sets of data values. The analysis is defined for a core first-order language to which Haskell 98 programs are reduced. Our analysis tool has been successfully applied to a range of programs, and our techniques seem to scale well. Throughout the paper, methods are represented much as we have implemented them in practice, again in Haskell.","PeriodicalId":188691,"journal":{"name":"ACM SIGPLAN Symposium/Workshop on Haskell","volume":"115 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2008-09-25","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133475024","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 29
期刊
ACM SIGPLAN Symposium/Workshop on Haskell
全部 Acc. Chem. Res. ACS Applied Bio Materials ACS Appl. Electron. Mater. ACS Appl. Energy Mater. ACS Appl. Mater. Interfaces ACS Appl. Nano Mater. ACS Appl. Polym. Mater. ACS BIOMATER-SCI ENG ACS Catal. ACS Cent. Sci. ACS Chem. Biol. ACS Chemical Health & Safety ACS Chem. Neurosci. ACS Comb. Sci. ACS Earth Space Chem. ACS Energy Lett. ACS Infect. Dis. ACS Macro Lett. ACS Mater. Lett. ACS Med. Chem. Lett. ACS Nano ACS Omega ACS Photonics ACS Sens. ACS Sustainable Chem. Eng. ACS Synth. Biol. Anal. Chem. BIOCHEMISTRY-US Bioconjugate Chem. BIOMACROMOLECULES Chem. Res. Toxicol. Chem. Rev. Chem. Mater. CRYST GROWTH DES ENERG FUEL Environ. Sci. Technol. Environ. Sci. Technol. Lett. Eur. J. Inorg. Chem. IND ENG CHEM RES Inorg. Chem. J. Agric. Food. Chem. J. Chem. Eng. Data J. Chem. Educ. J. Chem. Inf. Model. J. Chem. Theory Comput. J. Med. Chem. J. Nat. Prod. J PROTEOME RES J. Am. Chem. Soc. LANGMUIR MACROMOLECULES Mol. Pharmaceutics Nano Lett. Org. Lett. ORG PROCESS RES DEV ORGANOMETALLICS J. Org. Chem. J. Phys. Chem. J. Phys. Chem. A J. Phys. Chem. B J. Phys. Chem. C J. Phys. Chem. Lett. Analyst Anal. Methods Biomater. Sci. Catal. Sci. Technol. Chem. Commun. Chem. Soc. Rev. CHEM EDUC RES PRACT CRYSTENGCOMM Dalton Trans. Energy Environ. Sci. ENVIRON SCI-NANO ENVIRON SCI-PROC IMP ENVIRON SCI-WAT RES Faraday Discuss. Food Funct. Green Chem. Inorg. Chem. Front. Integr. Biol. J. Anal. At. Spectrom. J. Mater. Chem. A J. Mater. Chem. B J. Mater. Chem. C Lab Chip Mater. Chem. Front. Mater. Horiz. MEDCHEMCOMM Metallomics Mol. Biosyst. Mol. Syst. Des. Eng. Nanoscale Nanoscale Horiz. Nat. Prod. Rep. New J. Chem. Org. Biomol. Chem. Org. Chem. Front. PHOTOCH PHOTOBIO SCI PCCP Polym. Chem.
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
0
微信
客服QQ
Book学术公众号 扫码关注我们
反馈
×
意见反馈
请填写您的意见或建议
请填写您的手机或邮箱
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
现在去查看 取消
×
提示
确定
Book学术官方微信
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术
文献互助 智能选刊 最新文献 互助须知 联系我们:info@booksci.cn
Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。
Copyright © 2023 Book学术 All rights reserved.
ghs 京公网安备 11010802042870号 京ICP备2023020795号-1