Views: a way for pattern matching to cohabit with data abstraction
POPL '87 Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
POPL '88 Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
How to make ad-hoc polymorphism less ad hoc
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
The essence of functional programming
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Building interpreters by composing monads
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Monad transformers and modular interpreters
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A denotational semantics of inheritance
A denotational semantics of inheritance
Journal of Functional Programming
Journal of Functional Programming
Strongly typed heterogeneous collections
Haskell '04 Proceedings of the 2004 ACM SIGPLAN workshop on Haskell
On the relations between monadic semantics
Theoretical Computer Science
Journal of Functional Programming
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
EffectiveAdvice: disciplined advice with explicit effects
Proceedings of the 9th International Conference on Aspect-Oriented Software Development
Type classes as objects and implicits
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Monad factory: type-indexed monads
TFP'10 Proceedings of the 11th international conference on Trends in functional programming
CP'11 Proceedings of the 17th international conference on Principles and practice of constraint programming
Monatron: an extensible monad transformer library
IFL'08 Proceedings of the 20th international conference on Implementation and application of functional languages
SBLP'12 Proceedings of the 16th Brazilian conference on Programming Languages
UUAG meets AspectAG: how to make attribute grammars first-class
Proceedings of the Twelfth Workshop on Language Descriptions, Tools, and Applications
Taming aspects with monads and membranes
Proceedings of the 12th workshop on Foundations of aspect-oriented languages
Towards control of aspect interference using membranes and monads
Proceedings of the 12th annual international conference companion on Aspect-oriented software development
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Generic representations of tree transformations
Proceedings of the 9th ACM SIGPLAN workshop on Generic programming
Extensible effects: an alternative to monad transformers
Proceedings of the 2013 ACM SIGPLAN symposium on Haskell
Hi-index | 0.00 |
We make monadic components more reusable and robust to changes by employing two new techniques for virtualizing the monad stack: the monad zipper and monad views. The monad zipper is a higher-order monad transformer that creates virtual monad stacks by ignoring particular layers in a concrete stack. Monad views provide a general framework for monad stack virtualization: they take the monad zipper one step further and integrate it with a wide range of other virtualizations. For instance, particular views allow restricted access to monads in the stack. Furthermore, monad views provide components with a call-by-reference-like mechanism for accessing particular layers of the monad stack. With our two new mechanisms, the monadic effects required by components no longer need to be literally reflected in the concrete monad stack. This makes these components more reusable and robust to changes.