Arrows are a type of category-theoretic structure.
They have many applications when used as an interface within functional programming languages, akin to those of monads.
See the nLab page
In Haskell, the type class of arrows is defined by
class Arrow a where
arr :: (b -> c) -> a b c
(>>>) :: a b c -> a c d -> a b d
first :: a b c -> a (b, d) (c, d)
Arrows were introduced by John Hughes in
Hughes, John. 2000. ‘Generalising Monads to Arrows’. Science of Computer Programming 37 (1–3): 67–111. https://doi.org/10.1016/S0167-6423(99)00023-4. [pdf]
@article{hughes_2000,
title = {Generalising monads to arrows},
volume = {37},
doi = {10.1016/S0167-6423(99)00023-4},
number = {1-3},
journal = {Science of Computer Programming},
author = {Hughes, John},
year = {2000},
pages = {67--111}
}