Arrow (computer science)
Arrow (computer science)
Main page

Arrow (computer science)

logo
Community Hub0 subscribers
What are your thoughts?
Be the first to start a discussion here.
Be the first to start a discussion here.
Arrow (computer science)

In computer science, arrows or bolts are a type class used in computer programming to describe computations in a pure and declarative fashion. First proposed by computer scientist John Hughes as a generalization of monads, arrows provide a referentially transparent way to express relationships between logical steps in a computation. Unlike monads, arrows don't limit steps to having one and only one input. As a result, they have found use in functional reactive programming, tacit programming (point-free style), parsers, and in other uses.

While arrows were in use before being recognized as a distinct class, it wasn't until 2000 that John Hughes first published research focusing on them. Until then, monads had proven sufficient for most problems requiring the combination of program logic in pure code. However, some useful libraries, such as the Fudgets library for graphical user interfaces and certain efficient parsers, defied rewriting in a monadic form.

The formal concept of arrows was developed to explain these exceptions to monadic code, and in the process, monads were found to be a subset of arrows. Since then, arrows have been an active area of research. Their underlying laws and operations have been refined several times, with recent formulations such as arrow calculus requiring only five laws.

In category theory, the Kleisli categories of all monads form a proper subset of Hughes arrows. While Freyd categories were believed to be equivalent to arrows for a time, it has since been proven that arrows are even more general: arrows are not merely equivalent, but directly equal to enriched Freyd categories.

Like all type classes, arrows can be thought of as a set of qualities that can be applied to any data type. In the programming language Haskell, arrows allow functions (represented in Haskell by -> symbol) to combine in a reified form. However, the actual term "arrow" may also come from the fact that some (but not all) arrows correspond to the morphisms (also known as "arrows" in category theory) of different Kleisli categories. As a relatively new concept, there is no one, standard definition, but all formulations are logically equivalent, feature some required methods, and strictly obey certain mathematical laws.

The description currently used by the Haskell standard libraries requires only three basic operations:

Although only these three procedures are strictly needed to define an arrow, other methods can be derived to make arrows easier to work with in practice and theory.

One more helpful method can be derived from arr and first (and from which first can be derived):

See all
User Avatar
No comments yet.