# DeepArrow

### From HaskellWiki

(Difference between revisions)

BrettGiles (Talk | contribs) m (Categories) |
m |
||

Line 10: | Line 10: | ||

The DeepArrow library is about "deep function application" in two senses. First, compositions of <hask>first</hask>, <hask>second</hask>, and <hask>result</hask> apply functions deeply inside of values. Second, another set of combinators, <hask>funFirst</hask>, <hask>funSecond</hask>, and <hask>funResult</hask> extract "deep functions" so they can be applied. | The DeepArrow library is about "deep function application" in two senses. First, compositions of <hask>first</hask>, <hask>second</hask>, and <hask>result</hask> apply functions deeply inside of values. Second, another set of combinators, <hask>funFirst</hask>, <hask>funSecond</hask>, and <hask>funResult</hask> extract "deep functions" so they can be applied. | ||

+ | |||

+ | == Examples == | ||

== Background == | == Background == |

## Revision as of 03:01, 16 January 2007

The **DeepArrow** library is a framework for composable "editors" of pure values.

- Read the Haddock docs (with source code & Comment/Talk links)
- Get the code:
`darcs get http://darcs.haskell.org/packages/DeepArrow`

## 1 Introduction

By an "editor", I mean a function that targets a transformation at some part of a value, such as the first half of the second half of a value of type(a,(b,c))

b -> b'

(a,(b,c)) -> (a,(b',c))

first

second

first

second

result

first

second

result

funFirst

funSecond

funResult

## 2 Examples

## 3 Background

The inspiration for value-editing paths came while I was looking for a way for non-programmers to be able to create functional images. I've had a growing intuition over the last fifteen years that media authoring tools can be usefully looked at as environments for functional programming. I'd been wondering how to map a user's gestures into operations on a functional program. Lots of noodling led to ideas of composable interfaces and "tangible values" (term thanks to Sean Seefried) and gestural composition in Eros.

Eros was more complicated than I like, so I started splitting it into pieces:

- Phooey is a functional GUI library that has much of Eros's GUI implementation techniques, but much more carefully structured than in the Eros paper.
- DeepArrow has the general notion of "deep application".
- TV has the algebra of
*composable interfaces*, or visualizations of pure values, and it has*tangible values*, which are separable combinations of interface and value. It uses Phooey to generate GUIs very simply from interfaces.