Results 1  10
of
43
WASH/CGI: Serverside Web Scripting with Sessions and Typed, Compositional Forms
 Practical Aspects of Declarative Languages: 4th International Symposium, PADL 2002, volume 2257 of LNCS
, 2002
"... The common gateway interface (CGI) is one of the prevalent methods to provide dynamic contents on the Web. Since it is cumbersome to use in its raw form, there are many libraries that make CGI programming easier. WASH/CGI is a Haskell library for serverside Web scripting. Its implementation relies ..."
Abstract

Cited by 66 (3 self)
 Add to MetaCart
The common gateway interface (CGI) is one of the prevalent methods to provide dynamic contents on the Web. Since it is cumbersome to use in its raw form, there are many libraries that make CGI programming easier. WASH/CGI is a Haskell library for serverside Web scripting. Its implementation relies on CGI, but its use avoids most of CGI's drawbacks. It incorporates the concept of a session, provides a typed, compositional approach to constructing interaction elements (forms), and relies on callbacks to specify control ow. From a programmer's perspective, programming WASH/CGI is like programming a graphical user interface (GUI), where the layout is specified using HTML via a novel monadic interface.
A new notation for arrows
 In International Conference on Functional Programming (ICFP ’01
, 2001
"... The categorical notion of monad, used by Moggi to structure denotational descriptions, has proved to be a powerful tool for structuring combinator libraries. Moreover, the monadic programming style provides a convenient syntax for many kinds of computation, so that each library defines a new sublang ..."
Abstract

Cited by 52 (1 self)
 Add to MetaCart
The categorical notion of monad, used by Moggi to structure denotational descriptions, has proved to be a powerful tool for structuring combinator libraries. Moreover, the monadic programming style provides a convenient syntax for many kinds of computation, so that each library defines a new sublanguage. Recently, several workers have proposed a generalization of monads, called variously “arrows ” or Freydcategories. The extra generality promises to increase the power, expressiveness and efficiency of the embedded approach, but does not mesh as well with the native abstraction and application. Definitions are typically given in a pointfree style, which is useful for proving general properties, but can be awkward for programming specific instances. In this paper we define a simple extension to the functional language Haskell that makes these new notions of computation more convenient to use. Our language is similar to the monadic style, and has similar reasoning properties. Moreover, it is extensible, in the sense that new combining forms can be defined as expressions in the host language. 1.
Understanding and Evolving the ML Module System
, 2005
"... 0121633. Any opinions, findings, and conclusions or recommendations in this publication are those of the author and do not reflect the views of these agencies. Keywords: ML, module systems, type systems, functors, abstract data types, lambda calculus, The ML module system stands as a highwater mark ..."
Abstract

Cited by 45 (15 self)
 Add to MetaCart
0121633. Any opinions, findings, and conclusions or recommendations in this publication are those of the author and do not reflect the views of these agencies. Keywords: ML, module systems, type systems, functors, abstract data types, lambda calculus, The ML module system stands as a highwater mark of programming language support for data abstraction. Nevertheless, it is not in a fully evolved state. One prominent weakness is that module interdependencies in ML are restricted to be acyclic, which means that mutually recursive functions and data types must be written in the same module even if they belong conceptually in different modules. Existing efforts to remedy this limitation either involve drastic changes to the notion of what a module is, or fail to allow mutually recursive modules to hide type information from one another. Another issue is that there are several dialects of ML (the most popular being SML and O’Caml), and the module systems of these dialects differ in subtle yet semantically significant ways that have been difficult to account for in any rigorous way. It is important to come to a clear assessment of the existing design space and consolidate what is meant by “the ML module system” before embarking on such a major extension as recursive modules. In this dissertation I contribute to the understanding and evolution of the ML module system
Macros as multistage computations: Typesafe, generative, binding macros in MacroML
 in MacroML. In the International Conference on Functional Programming (ICFP ’01
, 2001
"... ..."
A type system for wellfounded recursion
 In 31st symp. Principles of Progr. Lang
, 2004
"... In the interest of designing a recursive module extension to ML that is as simple and general as possible, we propose a novel type system for general recursion over effectful expressions. The presence of effects seems to necessitate a backpatching semantics for recursion based on Scheme’s. Our type ..."
Abstract

Cited by 34 (6 self)
 Add to MetaCart
In the interest of designing a recursive module extension to ML that is as simple and general as possible, we propose a novel type system for general recursion over effectful expressions. The presence of effects seems to necessitate a backpatching semantics for recursion based on Scheme’s. Our type system ensures statically that recursion is wellfounded (that the body of a recursive expression will evaluate without attempting to access the undefined recursive variable), which avoids some unnecessary runtime costs associated with backpatching. To ensure wellfounded recursion in the presence of multiple recursive variables and separate compilation, we track the usage of individual recursive variables, represented statically by “names”. So that our type system may eventually be integrated smoothly into ML’s, reasoning involving names is only required inside code that uses our recursive construct and does not need to infect existing ML code. This material is based on work supported in part by NSF grants CCR9984812 and CCR0121633. Any opinions, findings, and conclusions or recommendations in this publication are those of the author(s) and do not reflect the views of this agency.
Algebra of logic programming
 International Conference on Logic Programming
, 1999
"... At present, the field of declarative programming is split into two main areas based on different formalisms; namely, functional programming, which is based on lambda calculus, and logic programming, which is based on firstorder logic. There are currently several language proposals for integrating th ..."
Abstract

Cited by 20 (3 self)
 Add to MetaCart
At present, the field of declarative programming is split into two main areas based on different formalisms; namely, functional programming, which is based on lambda calculus, and logic programming, which is based on firstorder logic. There are currently several language proposals for integrating the expressiveness of these two models of computation. In this thesis we work towards an integration of the methodology from the two research areas. To this end, we propose an algebraic approach to reasoning about logic programs, corresponding to the approach taken in functional programming. In the first half of the thesis we develop and discuss a framework which forms the basis for our algebraic analysis and transformation methods. The framework is based on an embedding of definite logic programs into lazy functional programs in Haskell, such that both the declarative and the operational semantics of the logic programs are preserved. In spite of its conciseness and apparent simplicity, the embedding proves to have many interesting properties and it gives rise to an algebraic semantics of logic programming. It also allows us to reason about logic programs in a simple calculational style, using rewriting and the algebraic laws of combinators. In the embedding, the meaning of a logic program arises compositionally from the meaning of its constituent subprograms and the combinators that connect them. In the second half of the thesis we explore applications of the embedding to the algebraic transformation of logic programs. A series of examples covers simple program derivations, where our techniques simplify some of the current techniques. Another set of examples explores applications of the more advanced program development techniques from the Algebra of Programming by Bird and de Moor [18], where we expand the techniques currently available for logic program derivation and optimisation. To my parents, Sandor and Erzsebet. And the end of all our exploring Will be to arrive where we started And know the place for the first time.
An abstract monadic semantics for value recursion
 In Proceeding of the 2003 Workshop on Fixed Points in Computer Science (FICS
, 2003
"... This paper proposes an operational semantics for value recursion in the context of monadic metalanguages. Our technique for combining value recursion with computational effects works uniformly for all monads. The operational nature of our approach is related to the implementation of recursion in Sch ..."
Abstract

Cited by 19 (7 self)
 Add to MetaCart
This paper proposes an operational semantics for value recursion in the context of monadic metalanguages. Our technique for combining value recursion with computational effects works uniformly for all monads. The operational nature of our approach is related to the implementation of recursion in Scheme and its monadic version proposed by Friedman and Sabry, but it defines a different semantics and does not rely on assignments. When contrasted to the axiomatic approach proposed by Erkök and Launchbury, our semantics for the continuation monad invalidates one of the axioms, adding to the evidence that this axiom is problematic in the presence of continuations. 1
Mixin Modules and Computational Effects
, 2003
"... We define a calculus for investigating the interactions between mixin modules and computational effects, by combining the purely functional mixin calculus CMS with a monadic metalanguage supporting the two separate notions of simplification (local rewrite rules) and computation (global evaluation ab ..."
Abstract

Cited by 17 (6 self)
 Add to MetaCart
We define a calculus for investigating the interactions between mixin modules and computational effects, by combining the purely functional mixin calculus CMS with a monadic metalanguage supporting the two separate notions of simplification (local rewrite rules) and computation (global evaluation able to modify the store). This distinction is important for smoothly integrating the CMS rules (which are all local) with the rules dealing with the imperative features. In our calculus mixins...
Arrows and computation
 The Fun of Programming
, 2003
"... With this machinery, we can give a common structure to programs based on different notions of computation. The generality of arrows tends to force one into a pointfree style, which is useful for proving general properties. However it is not to everyone's taste, and can be awkward for programmi ..."
Abstract

Cited by 14 (0 self)
 Add to MetaCart
With this machinery, we can give a common structure to programs based on different notions of computation. The generality of arrows tends to force one into a pointfree style, which is useful for proving general properties. However it is not to everyone's taste, and can be awkward for programming specific instances. The solution is a pointwise notation for arrows, which is automatically translated to the functional language Haskell. Each notion of computation thus defines a special sublanguage of Haskell. 1 Notions of computation We shall explore what we mean by a notion of computation using four varied examples. As a point of comparison, we shall consider how the following operator on functions may be generalized to the various types of `functionlike ' components.
Value Recursion in Monadic Computations
 OGI School of Science and Engineering, OHSU
, 2002
"... viii 1 ..."