Computational lambda-calculus and monads
Proceedings of the Fourth Annual Symposium on Logic in computer science
Handbook of theoretical computer science (vol. B)
Notions of computation and monads
Information and Computation
Programming in Oberon: steps beyond Pascal and Modula
Programming in Oberon: steps beyond Pascal and Modula
Project Oberon: the design of an operating system and compiler
Project Oberon: the design of an operating system and compiler
HOPL-II The second ACM SIGPLAN conference on History of programming languages
Monad transformers and modular interpreters
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Science of Computer Programming - Special issue on mathematics of program construction
Deriving backtracking monad transformers
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
ECOOP '01 Proceedings of the 15th European Conference on Object-Oriented Programming
The Design of a Pretty-printing Library
Advanced Functional Programming, First International Spring School on Advanced Functional Programming Techniques-Tutorial Text
Journal of Functional Programming
Achieving Information Flow Security through Precise Control of Effects
CSFW '05 Proceedings of the 18th IEEE workshop on Computer Security Foundations
Making monads first-class with template haskell
Proceedings of the first ACM SIGPLAN symposium on Haskell
Purely functional lazy non-deterministic programming
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Pointwise generalized algebraic data types
Proceedings of the 5th ACM SIGPLAN workshop on Types in language design and implementation
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Hi-index | 0.00 |
Monads are widely used in Haskell for modeling computational effects, but defining monads remains a daunting challenge. Since every part of a monad's definition depends on its computational effects, programmers cannot leverage the common behavior of all monads easily and thus must build from scratch each monad that models a new computational effect.I propose the Unimo framework which allows programmers to define monads and monad transformers in a modular manner. Unimo contains a heavily parameterized observer function which enforces the monad laws, and programmers define a monad by invoking the observer function with arguments that specify the computational effects of the monad. Since Unimo provides the common behavior of all monads in a reusable form, programmers no longer need to rebuild the semantic boilerplate for each monad and can instead focus on the more interesting and rewarding task of modeling the desired computational effects.