Notions of computation and monads
Information and Computation
The essence of functional programming
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
FPCA '93 Proceedings of the conference on Functional programming languages and computer architecture
FPCA '93 Proceedings of the conference on Functional programming languages and computer architecture
Shortcut deforestation in calculational form
FPCA '95 Proceedings of the seventh international conference on Functional programming languages and computer architecture
Bananas in space: extending fold and unfold to exponential types
FPCA '95 Proceedings of the seventh international conference on Functional programming languages and computer architecture
Deriving structural hylomorphisms from recursive definitions
Proceedings of the first ACM SIGPLAN international conference on Functional programming
Revisiting catamorphisms over datatypes with embedded functions (or, programs from outer space)
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Typer inference builds a short cut to deforestation
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
Fusion of recursive programs with computational effects
Theoretical Computer Science
Concatenate, reverse and map vanish for free
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Shortcut fusion for accumulating parameters & zip-like functions
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
A Generalization of Short-Cut Fusion and its Correctness Proof
Higher-Order and Symbolic Computation
Notions of Computation Determine Monads
FoSSaCS '02 Proceedings of the 5th International Conference on Foundations of Software Science and Computation Structures
Merging Monads and Folds for Functional Programming
Advanced Functional Programming, First International Spring School on Advanced Functional Programming Techniques-Tutorial Text
Parametric polymorphism and operational equivalence
Mathematical Structures in Computer Science
Algebraic fusion of functions with an accumulating parameter and its improvement
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
Lightweight fusion by fixed point promotion
Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Selective strictness and parametricity in structural operational semantics, inequationally
Theoretical Computer Science
Foundations for structured programming with GADTs
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Asymptotic Improvement of Computations over Free Monads
MPC '08 Proceedings of the 9th international conference on Mathematics of Program Construction
Algebraic fusion of functions with an accumulating parameter and its improvement
Journal of Functional Programming
A principled approach to programming with nested types in Haskell
Higher-Order and Symbolic Computation
Initial algebra semantics is enough!
TLCA'07 Proceedings of the 8th international conference on Typed lambda calculi and applications
A foundation for GADTs and inductive families: dependent polynomial functor approach
Proceedings of the seventh ACM SIGPLAN workshop on Generic programming
Hi-index | 0.00 |
Monads are commonplace programming devices that are used to uniformly structure computations with effects such as state, exceptions, and I/O. This paper further develops the monadic programming paradigm by investigating the extent to which monadic computations can be optimised by using generalisations of short cut fusion to eliminate monadic structures whose sole purpose is to "glue together" monadic program components.We make several contributions. First, we show that every inductive type has an associated build combinator and an associated short cut fusion rule. Second, we introduce the notion of an inductive monad to describe those monads that give rise to inductive types, and we give examples of such monads which are widely used in functional programming. Third, we generalise the standard augment combinators and cata/augment fusion rules for algebraic data types to types induced by inductive monads. This allows us to give the first cata/augment rules for some common data types, such as rose trees. Fourth, we demonstrate the practical applicability of our generalisations by providing Haskell implementations for all concepts and examples in the paper. Finally, we offer deep theoretical insights by showing that the augment combinators are monadic in nature, and thus that our cata/build and cata/augment rules are arguably the best generally applicable fusion rules obtainable.