Results 1 
8 of
8
Comprehending Monads
 Mathematical Structures in Computer Science
, 1992
"... Category theorists invented monads in the 1960's to concisely express certain aspects of universal algebra. Functional programmers invented list comprehensions in the 1970's to concisely express certain programs involving lists. This paper shows how list comprehensions may be generalised t ..."
Abstract

Cited by 459 (14 self)
 Add to MetaCart
Category theorists invented monads in the 1960's to concisely express certain aspects of universal algebra. Functional programmers invented list comprehensions in the 1970's to concisely express certain programs involving lists. This paper shows how list comprehensions may be generalised to an arbitrary monad, and how the resulting programming feature can concisely express in a pure functional language some programs that manipulate state, handle exceptions, parse text, or invoke continuations. A new solution to the old problem of destructive array update is also presented. No knowledge of category theory is assumed.
Deforestation: transforming programs to eliminate trees
 In Proceedings of the Second European Symposium on Programming
, 1988
"... ..."
Decomposing Typed Lambda Calculus Into a Couple of Categorical Programming Languages
 Proc. CTCS , Lect. Notes in Computer Science 953
, 1995
"... . We give two categorical programming languages with variable arrows and associated abstraction/reduction mechanisms, which extend the possibility of categorical programming [Hag87, CF92] in practice. These languages are complementary to each other  one of them provides a firstorder programming s ..."
Abstract

Cited by 8 (0 self)
 Add to MetaCart
. We give two categorical programming languages with variable arrows and associated abstraction/reduction mechanisms, which extend the possibility of categorical programming [Hag87, CF92] in practice. These languages are complementary to each other  one of them provides a firstorder programming style whereas the other does higherorder  and are "children" of the simply typed lambda calculus in the sense that we can decompose typed lambda calculus into them and, conversely, the combination of them is equivalent to typed lambda calculus. This decomposition is a consequence of a semantic analysis on typed lambda calculus due to C. Hermida and B. Jacobs [HJ94]. 1 Introduction There have been several attempts applying category theory to designing programming languages directly, especially to typed functional programming languages, since category theory itself has been a typed functional language for various mathematics. If one (possibly a programmer or a mathematician) can regard a cat...
Towards a Relational Programming Language
, 1995
"... Until recently, the art of deriving computer programs from specification has been performed equationally in a functional calculus. However, it has become evident that a relational calculus affords us a greater degree of expression and flexibility in both specification and proof since a relational ca ..."
Abstract
 Add to MetaCart
Until recently, the art of deriving computer programs from specification has been performed equationally in a functional calculus. However, it has become evident that a relational calculus affords us a greater degree of expression and flexibility in both specification and proof since a relational calculus naturally captures the notions of nondeterminism along with function converses. Unfortunately, no language exists in which we can directly execute relational expressions. Moreover, those candidate languages most likely to support an implementation of a relational calculus suffer from an inelegant or complicated evaluation model. This dissertation examines the suitability of these languages for supporting an implementation of relations and proposes a novel computational strategy for a relational language based on the category theory of relations. CONTENTS i Contents 1 Introduction 1 2 A Calculus of Relations 2 2.1 Basic Relational Operators \Delta \Delta \Delta \Delta \Delta \Del...
Logic Programming with Monads and Comprehensions
"... We give a logical reconstruction of allsolution predicates in terms of list comprehensions in Prolog's and we describe a variety of logic programming constructs in terms of monads and monad morphisms. Novel monad structures are described for lazy function lists, clause unfoldings and a mon ..."
Abstract
 Add to MetaCart
We give a logical reconstruction of allsolution predicates in terms of list comprehensions in Prolog's and we describe a variety of logic programming constructs in terms of monads and monad morphisms. Novel monad structures are described for lazy function lists, clause unfoldings and a monad morphism based embedding of Prolog in Prolog is given. Keywords: computing paradigms, logic programming, monads, list comprehensions, all solution predicates, Prolog, higherorder unification, lazy function lists. 1 Introduction Monads and comprehensions, have been successfully used in functional programming as a convenient generalization of various structurally similar programming constructs starting with simple ones like list processing and ending with intricate ones like CPS transformations and state transformers. We refer to the work of Philip Wadler [16, 17] for a long list of powerful examples and to Moggi [10] for the categorist sources of the concept of monad. Allsolution predic...
Polytypic Functional Programming and Data Abstraction
, 2006
"... Structural polymorphism is a generic programming technique known within the functional programming community under the names of polytypic or datatypegeneric programming. In this thesis we show that such a technique conflicts with the principle of data abstraction and propose a solution for reconcil ..."
Abstract
 Add to MetaCart
Structural polymorphism is a generic programming technique known within the functional programming community under the names of polytypic or datatypegeneric programming. In this thesis we show that such a technique conflicts with the principle of data abstraction and propose a solution for reconciliation. More concretely, we show that popular polytypic extensions of the functional programming language Haskell, namely, Generic Haskell and Scrap your Boilerplate have their genericity limited by data abstraction. We propose an extension to the Generic Haskell language where the `structure' in `structural polymorphism' is defined around the concept of interface and not the representation of a type.