1st December 2008, 10:46 pm
The post Semantic editor combinators gave an example of a pattern that comes up a lot for me in Haskell programming.
I want to apply functions inside of a newtype
without cumbersome unwrapping and wrapping of the representation insides.
While chatting with Daniel Peebles in #haskell today, the realization hit me that these “higher-order wrappers” can not only make other code pretty, but can themselves be expressed more beautifully and clearly, using two of the combinators given in that post.
Continue reading ‘Prettier functions for wrapping and wrapping’ »
The post Semantic editor combinators gave an example of a pattern that comes up a lot for me in Haskell programming. I want to apply functions inside of a newtype...
24th November 2008, 10:06 pm
While working on Eros, I encountered a function programming pattern I hadn’t known.
I was struck by the simplicity and power of this pattern, and I wondered why I hadn’t run into it before.
I call this idea “semantic editor combinators”, because it’s a composable way to create transformations on rich values.
I’m writing this post in order to share this simple idea, which is perhaps “almost obvious”, but not quite, due to two interfering habits:
- thinking of function composition as binary instead of unary, and
- seeing the functions
first
and second
as about arrows, and therefore esoteric.
What I enjoy most about these (semantic) editor combinators is that their use is type-directed and so doesn’t require much imagination.
When I have the type of a complex value, and I want to edit some piece buried inside, I just read off the path in the containing type, on the way to the buried value.
I started writing this post last year and put it aside.
Recent threads on the Reactive mailing list (including a dandy explanation by Peter Verswyvelen) and on David Sankel’s blog reminded me of my unfinished post, so I picked it up again.
Edits:
- 2008-11-29: added type of
v6
example. Tweaked inO2
alignment.
Continue reading ‘Semantic editor combinators’ »
While working on Eros, I encountered a function programming pattern I hadn’t known. I was struck by the simplicity and power of this pattern, and I wondered why I hadn’t...