<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Functional</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/11/0</link>
 <description></description>
 <language>en</language>
<item>
 <title>Objects to Unify Type Classes and GADTs</title>
 <link>http://lambda-the-ultimate.org/node/3837</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cs.mu.oz.au/~sulzmann/manuscript/objects-unify-type-classes-gadts.ps&quot;&gt;Objects to Unify Type Classes and GADTs&lt;/a&gt;, by Bruno C. d. S. Oliveira and Martin Sulzmann:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;We propose an Haskell-like language with the goal of unifying type classes and generalized algebraic datatypes (GADTs) into a single class construct. We treat classes as ﬁrst-class types and we use objects (instead of type class instances and data constructors) to define the values of those classes. We recover the ability to define functions by pattern matching by using sealed classes. The resulting language is simple and intuitive and it can be used to define, with similar convenience, the same programs that we would define in Haskell. Furthermore, unlike Haskell, dictionaries (or&lt;br &gt;
objects) can be explicitly (as well as implicitly) passed to functions and we can program in a simple object-oriented style directly.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;A very interesting paper on generalizing and unifying type classes and GADTs. Classes are now first-class values, resulting in a language that resembles a traditional, albeit more elegant, object-oriented language, and which supports a form of first-class &quot;lightweight modules&quot;.&lt;/p&gt;
&lt;p &gt;The language supports the traditional use of implicit type class dispatch, but also supports explicit dispatch, unlike Haskell. The authors suggest this could eliminate much of the duplication in the Haskell standard library of functions that take a type class or an explicit function, eg. insert/insertBy and sort/sortBy, although some syntactic sugar is needed to make this more concise.&lt;/p&gt;
&lt;p &gt;Classes are open to extension by default, although a class can also be explicitly specified as &quot;sealed&quot;, in which case extension is forbidden and you can pattern match on the cases. Furthermore, GADTs can now also carry methods, thus introducing dispatch to algebraic types. This fusion does not itself solve the expression problem, though it does ease the burden through the first-class support of both types of extension. You can see the Scala influences here.&lt;/p&gt;
&lt;p &gt;I found this paper via the &lt;a href=&quot;http://www.reddit.com/r/haskell/comments/b4o6g/objects_to_unify_type_classes_and_gadts_ps/&quot;&gt;Haskell sub-reddit&lt;/a&gt;, which also links to &lt;a href=&quot;http://sneezy.cs.nott.ac.uk/fun/feb-08/bruno-slides.pdf&quot;&gt;a set of slides&lt;/a&gt;. The authors acknowledge Scala as an influence, and as future work, suggest extensions like type families and to support more module-like features, such as nesting and opaque types.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/14">OOP</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Mon, 22 Feb 2010 16:51:40 -0500</pubDate>
</item>
<item>
 <title>A Lambda Calculus for Real Analysis</title>
 <link>http://lambda-the-ultimate.org/node/3831</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://paultaylor.eu/ASD/lamcra/&quot;&gt;A Lambda Calculus for Real Analysis&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Abstract Stone Duality is a revolutionary paradigm for general topology that describes computable continuous functions directly, without using set theory, infinitary lattice theory or a prior theory of discrete computation. Every expression in the calculus denotes both a continuous function and a program, and the reasoning looks remarkably like a sanitised form of that in classical topology. This is an introduction to ASD for the general mathematician, with application to elementary real analysis.&lt;/p&gt;
&lt;p &gt;This language is applied to the Intermediate Value Theorem: the solution of equations for continuous functions on the real line. As is well known from both numerical and constructive considerations, the equation cannot be solved if the function &quot;hovers&quot; near 0, whilst tangential solutions will never be found.&lt;/p&gt;
&lt;p &gt;In ASD, both of these failures and the general method of finding solutions of the equation when they exist are explained by the new concept of overtness. The zeroes are captured, not as a set, but by higher-type modal operators. Unlike the Brouwer degree, these are defined and (Scott) continuous across singularities of a parametric equation.&lt;/p&gt;
&lt;p &gt;Expressing topology in terms of continuous functions rather than sets of points leads to treatments of open and closed concepts that are very closely lattice- (or de Morgan-) dual, without the double negations that are found in intuitionistic approaches. In this, the dual of compactness is overtness. Whereas meets and joins in locale theory are asymmetrically finite and infinite, they have overt and compact indices in ASD.&lt;/p&gt;
&lt;p &gt;Overtness replaces metrical properties such as total boundedness, and cardinality conditions such as having a countable dense subset. It is also related to locatedness in constructive analysis and recursive enumerability in recursion theory.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Paul Taylor is deadly serious about the intersection of logic, mathematics, and computation. I came across this after beating my head against &lt;a href=&quot;http://www.amazon.com/Probability-Theory-Logic-Science-Vol/dp/0521592712/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1266357272&amp;amp;sr=8-1&quot;&gt;Probability Theory: The Logic of Science&lt;/a&gt; and &lt;a href=&quot;http://axiomaticeconomics.com/&quot;&gt;Axiomatic Theory of Economics&lt;/a&gt; over the weekend, realizing that my math just wasn&#039;t up to the tasks, and doing a Google search for &quot;constructive real analysis.&quot; &quot;Real analysis&quot; because it was obvious that that was what both of the aforementioned texts were relying on; &quot;constructive&quot; because I&#039;d really like to develop proofs in Coq/extract working code from them. This paper was on the second page of results. Paul&#039;s name was familiar (and not just because I share it with him); he translated Jean-Yves Girard&#039;s regrettably out-of-print &lt;a href=&quot;http://paultaylor.eu/stable/Proofs+Types&quot;&gt;Proofs and Types&lt;/a&gt; to English and maintains a very popular set of tools for typesetting &lt;a href=&quot;http://paultaylor.eu/diagrams/&quot;&gt;commutative diagrams&lt;/a&gt; using LaTeX.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/22">Category Theory</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Tue, 16 Feb 2010 17:00:42 -0500</pubDate>
</item>
<item>
 <title>Computational Semantics with Functional Programming </title>
 <link>http://lambda-the-ultimate.org/node/3820</link>
 <description>The manuscript of the book &lt;a href=&quot;http://homepages.cwi.nl/~jve/cs/&quot;&gt;Computational Semantics with Functional Programming&lt;/A&gt; by Jan van Eijck and Christina Unger, as well as related software, is available online.&lt;p&gt;
The introductory chapters are probably going to be unnecessary for LtU readers, but once things get going there is a lot to learn here  if you are interested in formal semantics of natural language, especially in the Montague-style. And if this doesn&#039;t ring a bell - just search for &quot;continutation&quot; in the manuscript, and be prepared to meet old friends (you know who you are) in a new context.&lt;p&gt;
&lt;small&gt;If the contributing editors will neglect their duties, LtU will wither and die. Hint, hint.&lt;/small&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/9">Misc Books</category>
 <pubDate>Thu, 11 Feb 2010 21:32:08 -0500</pubDate>
</item>
<item>
 <title>Delimited Control in OCaml, Abstractly and Concretely, System Description</title>
 <link>http://lambda-the-ultimate.org/node/3788</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://okmij.org/ftp/Computation/caml-shift.pdf&quot;&gt;Delimited Control in OCaml, Abstractly and Concretely, System Description&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We describe the first implementation of multi-prompt delimited control operators in OCaml that is direct in that it captures only the needed part of the control stack. The implementation is a library that requires no changes to the OCaml compiler or run-time, so it is perfectly compatible with existing OCaml source code and byte-code. The library has been in fruitful practical use for four years.&lt;/p&gt;
&lt;p &gt;We present the library as an implementation of an abstract machine derived by elaborating the definitional machine. The abstract view lets us distill a minimalistic API, scAPI, sufficient for implementing multi-prompt delimited control. We argue that a language system that supports exception and stack-overflow handling supports scAPI. Our library illustrates how to use scAPI to implement multi-prompt delimited control in a typed language. The approach is general and can be used to add multi-prompt delimited control to other existing language systems.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Oleg was kind enough to send me an e-mail letting me know of this paper&#039;s existence (it appears not yet to be linked from the &quot;Computation&quot; page under which it is stored) and to include me in the acknowledgements. Since the paper in its current form has been accepted for publication, he indicated that it can be made more widely available, so here it is. In typical Oleg fashion, it offers insights at both the theoretical and implementation levels.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/23">Cross language runtimes</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Mon, 25 Jan 2010 12:27:44 -0500</pubDate>
</item>
<item>
 <title>Syntactic Proofs of Compositional Compiler Correctness</title>
 <link>http://lambda-the-ultimate.org/node/3765</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/tmp/compose.pdf&quot;&gt;Syntactic Proofs of Compositional Compiler Correctness&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Semantic preservation by compilers for higher-order languages can be veriﬁed using simple syntactic methods. At the heart of classic techniques are relations between source-level and target-level values. Unfortunately, these relations are speciﬁc to particular compilers, leading to correctness theorems that have nothing to say about linking programs with functions compiled by other compilers or written by hand in the target language. Theorems based on logical relations manage to avoid this problem, but at a cost: standard logical relations do not apply directly to programs with non-termination or impurity, and extensions to handle those features are relatively complicated, compared to the classical compiler veriﬁcation literature. &lt;/p&gt;
&lt;p &gt;In this paper, we present a new approach to “open” compiler correctness theorems that is “syntactic” in the sense that the core relations do not refer to semantics. Though the technique is much more elementary than previous proposals, it scales up nicely to realistic languages. In particular, untyped and impure programs may be handled simply, while previous work has addressed neither in this context. &lt;/p&gt;
&lt;p &gt;Our approach is based on the observation that it is an unnecessary handicap to consider proofs as black boxes. We identify some theorem-speciﬁc proof skeletons, such that we can deﬁne an algebra of nondeterministic compilations and their proofs, and we can compose any two compilations to produce a correct-by-construction result. We have prototyped these ideas with a Coq implementation of multiple CPS translations for an untyped Mini-ML source language with recursive functions, sums, products, mutable references, and exceptions.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;A submitted draft of another paper from Adam, continuing to expand &lt;a href=&quot;http://ltamer.sourceforge.net&quot;&gt;LambdaTamer&lt;/a&gt;&#039;s reach.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 09 Jan 2010 12:10:05 -0500</pubDate>
</item>
<item>
 <title>A Verified Compiler for an Impure Functional Language</title>
 <link>http://lambda-the-ultimate.org/node/3764</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/papers/ImpurePOPL10/&quot;&gt;A Verified Compiler for an Impure Functional Language&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We present a verified compiler to an idealized assembly language from a small, untyped functional language with mutable references and exceptions. The compiler is programmed in the Coq proof assistant and has a proof of total correctness with respect to big-step operational semantics for the source and target languages. Compilation is staged and includes standard phases like translation to continuation-passing style and closure conversion, as well as a common subexpression elimination optimization. In this work, our focus has been on discovering and using techniques that make our proofs easy to engineer and maintain. While most programming language work with proof assistants uses very manual proof styles, all of our proofs are implemented as adaptive programs in Coq&#039;s tactic language, making it possible to reuse proofs unchanged as new language features are added.&lt;/p&gt;
&lt;p &gt;In this paper, we focus especially on phases of compilation that rearrange the structure of syntax with nested variable binders. That aspect has been a key challenge area in past compiler verification projects, with much more effort expended in the statement and proof of binder-related lemmas than is found in standard pencil-and-paper proofs. We show how to exploit the representation technique of parametric higher-order abstract syntax to avoid the need to prove any of the usual lemmas about binder manipulation, often leading to proofs that are actually shorter than their pencil-and-paper analogues. Our strategy is based on a new approach to encoding operational semantics which delegates all concerns about substitution to the meta language, without using features incompatible with general purpose type theories like Coq&#039;s logic.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Further work on/with &lt;a href=&quot;http://ltamer.sourceforge.net/&quot;&gt;LambdaTamer&lt;/a&gt; for certified compiler development.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 09 Jan 2010 12:03:42 -0500</pubDate>
</item>
<item>
 <title>Certified Programming With Dependent Types Goes Beta</title>
 <link>http://lambda-the-ultimate.org/node/3763</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/cpdt/&quot;&gt;Certified Programming With Dependent Types&lt;/a&gt;&lt;/p&gt;
&lt;p &gt;From the introduction:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We would all like to have programs check that our programs are correct.  Due in no small part to some bold but unfulfilled promises in the history of computer science, today most people who write software, practitioners and academics alike, assume that the costs of formal program verification outweigh the benefits.  The purpose of this book is to convince you that the technology of program verification is mature enough today that it makes sense to use it in a support role in many kinds of research projects in computer science.  Beyond the convincing, I also want to provide a handbook on practical engineering of certified programs with the Coq proof assistant.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This is the best Coq tutorial that I know of, partially for being comprehensive, and partially for taking a very different tack than most with Adam&#039;s emphasis on proof automation using Coq&#039;s Ltac tactic language. It provides an invaluable education toward understanding what&#039;s going on either in &lt;a href=&quot;http://ltamer.sourceforge.net/&quot;&gt;LambdaTamer&lt;/a&gt; or &lt;a href=&quot;http://ynot.cs.harvard.edu/&quot;&gt;Ynot&lt;/a&gt;, both of which are important projects in their own rights.&lt;/p&gt;
&lt;p &gt;Please note that Adam is explicitly requesting feedback on this work.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/9">Misc Books</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/18">Teaching &amp; Learning</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 09 Jan 2010 11:56:49 -0500</pubDate>
</item>
<item>
 <title>John Hughes on Erlang and Haskell</title>
 <link>http://lambda-the-ultimate.org/node/3673</link>
 <description>&lt;p &gt;John Hughes talks about his experience with Erlang vs. Haskell in &lt;a href=&quot;http://www.infoq.com/interviews/Erlang-Haskell-John-Hughes&quot;&gt;an InfoQ Interview&lt;/a&gt;. While the discussions about strict vs lazy, pure vs side effecting, and dynamic vs static typing are interesting he raises a good question for the LtU crowd at the end:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;I think functional programming is a very interesting concept for the future and for the present indeed. One of the things I do wonder about though, is when I got interested in the field, the mainstream was probably Fortran and COBOL and even C was fairly new at that time. The functional programming pioneers spoke of an order of magnitude improvement in productivity and I think functional programming has delivered that. &lt;/p&gt;
&lt;p &gt;If you compare Haskell programs to C code or even C++ often, they are about an order of magnitude smaller and simpler. The same is for Erlang, those results are being validated in the industry. Where is the next order of magnitude coming from? I wish I had an answer to that question because it&#039;s hard to see almost. When you look at a beautiful Haskell program, how could this be 10 times shorter? But I think we need to be asking ourselves that kind of question. If I had a good idea there, I would spend the rest of my career working on it.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;So, LtU, where is the next order of magnitude coming from?&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/6">General</category>
 <pubDate>Fri, 06 Nov 2009 11:29:42 -0500</pubDate>
</item>
<item>
 <title>Causal Commutative Arrows and Their Optimization</title>
 <link>http://lambda-the-ultimate.org/node/3659</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cs.yale.edu/homes/hl293/download/icfp066-liu.pdf&quot;&gt;Causal Commutative Arrows and Their Optimization&lt;/a&gt;, Hai Liu. Eric Cheng. Paul Hudak. ICFP 2009.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Arrows are a popular form of abstract computation. Being more general than monads, they are more broadly applicable, and in particular are a good abstraction for signal processing and dataflow computations. Most notably, arrows form the basis for a domain specific language called Yampa, which has been used in a variety of concrete applications, including animation, robotics, sound synthesis, control systems, and graphical user interfaces.&lt;/p&gt;
&lt;p &gt;Our primary interest is in better understanding the class of abstract computations captured by Yampa. Unfortunately, arrows are not concrete enough to do this with precision. To remedy this situation we introduce the concept of commutative arrows that capture a kind of non-interference property of concurrent computations. We also add an init operator, and identify a crucial law that captures the causal nature of arrow effects. We call the resulting computational model causal commutative arrows.&lt;/p&gt;
&lt;p &gt;To study this class of computations in more detail, we define an extension to the simply typed lambda calculus called causal commutative arrows (CCA), and study its properties. Our key contribution is the identification of a normal form for CCA called causal commutative normal form (CCNF). By defining a normalization procedure we have developed an optimization strategy that yields dramatic improvements in performance over conventional implementations of arrows. We have implemented this technique in Haskell, and conducted benchmarks that validate the effectiveness of our approach. When combined with stream fusion, the overall methodology can result in speed-ups of greater than two orders of magnitude.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;One way of understanding what is going on in this paper is that in terms of dataflow programming, FRP programs correspond to programs with single-entry, single-exit dataflow graphs. This means that none of the internal dataflow nodes in an FRP program are actually necessary -- you can coalesce all those nodes into a single node while preserving the observable behavior. (They briefly touch on this point when they mention that synchronous languages try to compile to &quot;single loop code&quot;.) What&#039;s very slick is that they have a nice normal form procedure that (a) is defined entirely in terms of their high-level language, and (b) always yields code corresponding to the the coalesced dataflow graph. It&#039;s an elegant demonstration of the power of equational reasoning. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <pubDate>Wed, 28 Oct 2009 06:06:57 -0400</pubDate>
</item>
<item>
 <title>SequenceL - declarative computation on nonscalars</title>
 <link>http://lambda-the-ultimate.org/node/3635</link>
 <description>&lt;p &gt;I recently came across the language &lt;i &gt;&lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.90.7370&quot;&gt;SequenceL&lt;/a&gt;&lt;/i&gt;, which it seems &lt;a href=&quot;http://www.nasaspaceflight.com/2005/12/cev-abort-system-gains-a-brain/&quot;&gt;NASA is using&lt;/a&gt; in some of its human spaceflight programs. SequenceL is described as a high-level language for declarative computation on nonscalars. One of the key features of the language appears to be the avoidance of the need to explicitly specify recursive or iterative operations. For example, given the function definition &lt;/p&gt;
&lt;pre &gt;
Search(scalar Target, tuple [Subscript, Word]) = 
    Subscript when Word = Target 
&lt;/pre&gt;&lt;p &gt;which applies to tuples, the programmer can apply the function directly to lists of tuples without any need to specify how that application will be performed, e.g.&lt;/p&gt;
&lt;pre &gt;
search(fox,[[1,dog],[2,cat],[3,fox],[4,parrot]]) → 3 
search(rabbit,[[1,dog],[2,cat],[3,fox],[4,parrot]]) → [] 
&lt;/pre&gt;&lt;p &gt;The language designers (Daniel Cooke and J. Nelson Rushton) claim that this kind of thing leads to more concise and readable code, and a more direct representation of a specification.&lt;/p&gt;
&lt;p &gt;Unfortunately, the &lt;a href=&quot;http://languages.cs.ttu.edu/sequencel/&quot;&gt;SequenceL&lt;/a&gt; website appears to be inaccessible at the moment. However, &lt;a href=&quot;http://www.cs.ttu.edu/~dcooke/&quot;&gt;Daniel Cooke&#039;s site&lt;/a&gt; includes links to a number of papers and talks that describe SequenceL. In particular, the paper &lt;i &gt;&lt;a href=&quot;http://www.cs.ttu.edu/~dcooke/sequencel11-27-2006.pdf&quot;&gt;Normalize, Transpose, and Distribute:  An Automatic Approach for Handling Nonscalars&lt;/a&gt;&lt;/i&gt; provides a detailed description of the &quot;Consume-Simplify-Produce/Normalize-Transpose&quot; approach that is embodied by SequenceL. There&#039;s also an overview of SequenceL available through &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.90.7370&quot;&gt;CiteSeer&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Sun, 11 Oct 2009 17:34:30 -0400</pubDate>
</item>
<item>
 <title>A Type-theoretic Foundation for Programming with Higher-order Abstract Syntax and First-class Substitutions</title>
 <link>http://lambda-the-ultimate.org/node/3627</link>
 <description>&lt;a href=&quot;http://complogic.cs.mcgill.ca/beluga/popl08/Pientka08_hoasfun.pdf&quot;&gt;A Type-theoretic Foundation for Programming with Higher-order Abstract Syntax and First-class Substitutions&lt;/a&gt; by Brigitte Pientka, appeared in POPL 08. 

&lt;blockquote &gt;
Higher-order abstract syntax (HOAS) is a simple, powerful technique
for implementing object languages, since it directly supports
common and tricky routines dealing with variables, such as
capture-avoiding substitution and renaming. This is achieved by
representing binders in the object-language via binders in the meta-language.
However, enriching functional programming languages
with direct support for HOAS has been a major challenge, because
recursion over HOAS encodings requires one to traverse -
abstractions and necessitates programming with open objects.
&lt;p &gt;
We present a novel type-theoretic foundation based on contextual
modal types which allows us to recursively analyze open terms
via higher-order pattern matching. By design, variables occurring
in open terms can never escape their scope. Using several examples,
we demonstrate that our framework provides a name-safe foundation
to operations typically found in nominal systems. In contrast
to nominal systems however, we also support capture-avoiding
substitution operations and even provide first-class substitutions to
the programmer. The main contribution of this paper is a syntax directed
bi-directional type system where we distinguish between
the data language and the computation language together with the
progress and preservation proof for our language.
&lt;/blockquote&gt;

Its been a while since I posted, but this paper appears that it may be of interest to some members of this community. It looks interesting to me, but I just wish I understood all the terminology. I don&#039;t know what &quot;open objects&quot; are, and why they are a problem. I don&#039;t understand what HOAS is. I don&#039;t even know what binders are. The list goes on. I surely can&#039;t be the only person who is interested, but feels that this is just out of their grasp. I bet that I probably could understand these things with a minimum of explanation, given I have experience implementing languages. If anyone is interested in rephrasing the abstract in more basic terms, I would be very appreciative.  

[Edit: corrected spelling of Brigitte Pientka. My apologies.]</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <pubDate>Sat, 03 Oct 2009 14:51:00 -0400</pubDate>
</item>
<item>
 <title>Parallel Performance Tuning for Haskell</title>
 <link>http://lambda-the-ultimate.org/node/3596</link>
 <description>&lt;small&gt;&lt;a href=&quot;http://research.microsoft.com/apps/pubs/default.aspx?id=80976&quot;&gt;Parallel Performance Tuning for Haskell&lt;/a&gt;. Don Jones Jr., Simon Marlow, and Satnam Singh.&lt;/small&gt;&lt;p&gt;
&lt;blockquote&gt;
Parallel Haskell programming has entered the mainstream with support now included in GHC for multiple parallel programming models, along with multicore execution support in the runtime. However, tuning programs for parallelism is still something of a black art. Without much in the way of feedback provided by the runtime system, it is a matter of trial and error combined with experience to achieve good parallel speedups.

This paper describes an early prototype of a parallel profiling system for multicore programming with GHC. The system comprises three parts: fast event tracing in the runtime, a Haskell library for reading the resulting trace files, and a number of tools built on this library for presenting the information to the programmer. We focus on one tool in particular, a graphical timeline browser called &lt;a href=&quot;http://raintown.org/?page_id=132&quot;&gt;ThreadScope&lt;/a&gt;.

The paper illustrates the use of ThreadScope through a number of case studies, and describes some useful methodologies for parallelizing Haskell programs.
&lt;/blockquote&gt;&lt;P&gt;

</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Thu, 03 Sep 2009 18:03:20 -0400</pubDate>
</item>
<item>
 <title>Lifted inference: normalizing loops by evaluation</title>
 <link>http://lambda-the-ultimate.org/node/3566</link>
 <description>&lt;small&gt;&lt;a href=&quot;http://okmij.org/ftp/lift-reduce/lifted.pdf&quot;&gt;Lifted inference: normalizing loops by evaluation.&lt;/a&gt; Oleg Kiselyov and Chung-chieh Shan. &lt;a href=&quot;http://www.brics.dk/~danvy/NBE09/&quot;&gt;2009 Workshop on Normalization by Evaluation&lt;/A&gt;.&lt;/small&gt;&lt;p&gt;
&lt;blockquote&gt;
Many loops in probabilistic inference map almost every individual in their domain to the same result. Running such
loops symbolically takes time sublinear in the domain size. Using normalization by evaluation with first-class delimited continuations, we lift inference procedures to reap this speed-up without interpretive overhead. To express nested loops, we use multiple control delimiters for metacircular interpretation. To express loops over a powerset domain, we convert nested loops over a subset to unnested loops.&lt;/blockquote&gt;&lt;p&gt;

The paper is a bit hard to follow, but there are enough little tricks here to merit attentive reading. Or better yet, read &lt;a href=&quot;http://okmij.org/ftp/lift-reduce/README.dr&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;http://okmij.org/ftp/lift-reduce/&quot;&gt;code&lt;/a&gt;.

The basic PLT idea might be summed as doing abstract interpretation on a shallowly embedded DSL using delimited continuations.</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <pubDate>Thu, 13 Aug 2009 22:34:15 -0400</pubDate>
</item>
<item>
 <title>A Veriﬁed Compiler for an Impure Functional Language</title>
 <link>http://lambda-the-ultimate.org/node/3554</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/tmp/imp.pdf&quot;&gt;A Veriﬁed Compiler for an Impure Functional Language&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We present a veriﬁed compiler to an idealized assembly language from a small, untyped functional language with mutable references and exceptions. The compiler is programmed in the Coq proof assistant and has a proof of total correctness with respect to big-step operational semantics for the source and target languages. Compilation is staged and includes standard phases like translation to continuation-passing style and closure conversion, as well as a common subexpression elimination optimization. In this work, our focus has been on discovering and using techniques that make our proofs easy to engineer and maintain. While most programming language work with proof assistants uses very manual proof styles, all of our proofs are implemented as adaptive programs in Coq’s tactic language, making it possible to reuse proofs unchanged as new language features are added. &lt;/p&gt;
&lt;p &gt;In this paper, we focus especially on phases of compilation that rearrange the structure of syntax with nested variable binders. That aspect has been a key challenge area in past compiler veriﬁcation projects, with much more effort expended in the statement and proof of binder-related lemmas than is found in standard pencil-and-paper proofs. We show how to exploit the representation technique of parametric higher-order abstract syntax to avoid the need to prove any of the usual lemmas about binder manipulation, often leading to proofs that are actually shorter than their pencil-and-paper analogues. Our strategy is based on a new approach to encoding operational semantics which delegates all concerns about substitution to the meta language, without using features incompatible with general-purpose type theories like Coq’s logic.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The latest from Adam Chlipala. Yet another evolutionary step for &lt;a href=&quot;http://lambda-the-ultimate.org/node/2146&quot;&gt;Lambda&lt;/a&gt; &lt;a href=&quot;http://lambda-the-ultimate.org/node/2853&quot;&gt;Tamer&lt;/a&gt;. Between this and &lt;a href=&quot;http://lambda-the-ultimate.org/node/3549&quot;&gt;Ynot&lt;/a&gt; the Coq/certified compiler story seems to be getting more impressive nearly daily.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <pubDate>Mon, 10 Aug 2009 12:09:11 -0400</pubDate>
</item>
<item>
 <title>Certiﬁed Web Services in Ynot</title>
 <link>http://lambda-the-ultimate.org/node/3548</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://ynot.cs.harvard.edu/papers/wwv09.pdf&quot;&gt;Certiﬁed Web Services in Ynot&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
In this paper we demonstrate that it is possible to implement certiﬁed web systems in a way not much diﬀerent from writing Standard ML or Haskell code, including use of imperative features like pointers, ﬁles, and socket I/O. We present a web-based course gradebook application developed with Ynot, a Coq library for certiﬁed imperative programming. We add a dialog-based I/O system to Ynot, and we extend Ynot’s underlying Hoare logic with event traces to reason about I/O behavior. Expressive abstractions allow the modular certiﬁcation of both high level speciﬁcations like privacy guarantees and low level properties like memory safety and correct parsing.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Ynot, always ambitious, takes another serious swing: extracting a real web application from a proof development. In some respects the big news here is the additional coverage that Ynot now offers in terms of support for file and socket I/O, and the event trace mechanism. But there&#039;s even bigger news, IMHO, which is the subject of another paper that warrants a separate post.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/6">General</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Thu, 06 Aug 2009 12:46:05 -0400</pubDate>
</item>
</channel>
</rss>
