- Sponsor:
- sigplan
No abstract available.
Proceeding Downloads
Branching processes for QuickCheck generators
In QuickCheck (or, more generally, random testing), it is challenging to control random data generators' distributions---specially when it comes to user-defined algebraic data types (ADT). In this paper, we adapt results from an area of mathematics ...
A promise checked is a promise kept: inspection testing
Occasionally, developers need to ensure that the compiler treats their code in a specific way that is only visible by inspecting intermediate or final compilation artifacts. This is particularly common with carefully crafted compositional libraries, ...
AutoBench: comparing the time performance of Haskell programs
Two fundamental goals in programming are correctness (producing the right results) and efficiency (using as few resources as possible). Property-based testing tools such as QuickCheck provide a lightweight means to check the correctness of Haskell ...
Autobahn 2.0: minimizing bangs while maintaining performance (system demonstration)
Lazy evaluation has many advantages, but it can cause bad performance. Consequently, Haskell allows users to force eager evaluation at certain program points by inserting strictness annotations, known and written as bangs (!). Unfortunately, manual bang ...
Generic programming of all kinds
Datatype-generic programming is a widely used technique to define functions that work regularly over a class of datatypes. Examples include deriving serialization of data, equality or even functoriality. The state-of-the-art of generic programming still ...
Deriving via: or, how to turn hand-written instances into an anti-pattern
Haskell's deriving construct is a cheap and cheerful way to quickly generate instances of type classes that follow common patterns. But at present, there is only a subset of such type class patterns that deriving supports, and if a particular class lies ...
Improving typeclass relations by being open
Mathematical concepts such as monads, functors, monoids, and semigroups are expressed in Haskell as typeclasses. Therefore, in order to exploit relations such as “every monad is a functor”, and “every monoid is a semigroup”, we need to be able to also ...
Coherent explicit dictionary application for Haskell
Type classes are one of Haskell's most popular features and extend its type system with ad-hoc polymorphism. Since their conception, there were useful features that could not be offered because of the desire to offer two correctness properties: ...
Type variables in patterns
For many years, GHC has implemented an extension to Haskell that allows type variables to be bound in type signatures and patterns, and to scope over terms. This extension was never properly specified. We rectify that oversight here. With the formal ...
The Thoralf plugin: for your fancy type needs
Many fancy types (e.g., generalized algebraic data types, type families) require a type checker plugin. These fancy types have a type index (e.g., type level natural numbers) with an equality relation that is difficult or impossible to represent using ...
Ghosts of departed proofs (functional pearl)
Library authors often are faced with a design choice: should a function with preconditions be implemented as a partial function, or by returning a failure condition on incorrect use? Neither option is ideal. Partial functions lead to frustrating run-...
Theorem proving for all: equational reasoning in liquid Haskell (functional pearl)
Equational reasoning is one of the key features of pure functional languages such as Haskell. To date, however, such reasoning always took place externally to Haskell, either manually on paper, or mechanised in a theorem prover. This article shows how ...
Rhine: FRP with type-level clocks
Processing data at different rates is generally a hard problem in reactive programming. Buffering problems, lags, and concurrency issues often occur. Many of these problems are clock errors, where data at different rates is combined incorrectly. ...
Embedding invertible languages with binders: a case of the FliPpr language
This paper describes a new embedding technique of invertible programming languages, through the case of the FliPpr language. Embedded languages have the advantage of inheriting host languages' features and supports; and one of the influential methods of ...
A high-performance multicore IO manager based on libuv (experience report)
We present a high performance multicore I/O manager based on libuv for Glasgow Haskell Compiler (GHC). The new I/O manager is packaged as an ordinary Haskell package rather than baked into GHC's runtime system(GHC RTS), yet takes advantage of GHC RTS's ...
Suggesting valid hole fits for typed-holes (experience report)
Type systems allow programmers to communicate a partial specification of their program to the compiler using types, which can then be used to check that the implementation matches the specification. But can the types be used to aid programmers during ...
Index Terms
- Proceedings of the 11th ACM SIGPLAN International Symposium on Haskell
Recommendations
Acceptance Rates
Year | Submitted | Accepted | Rate |
---|---|---|---|
Haskell '14 | 28 | 12 | 43% |
Haskell '13 | 33 | 13 | 39% |
Haskell '08 | 28 | 13 | 46% |
Haskell '03 | 30 | 10 | 33% |
Haskell '02 | 24 | 9 | 38% |
Overall | 143 | 57 | 40% |