Введение

В информатике, стрелки или болты — это класс типов, используемый в программировании для описания вычислений в чистом и декларативном стиле. Впервые предложенные ученым-компьютерщиком Джоном Хьюзом как обобщение монад, стрелки предоставляют референциально прозрачный способ выражения связей между логическими шагами вычисления. В отличие от монад, стрелки не ограничивают шаги одним единственным входом. Благодаря этому они нашли применение в функционально-реактивном программировании, программировании без точек и парсерах, среди прочих областей.

Мотивация и история

В то время как стрелки использовались и до того, как были выделены в отдельный класс, лишь в 2000 году Джон Хьюз впервые опубликовал исследование, посвященное им. До этого момента монод было достаточно для решения большинства задач, требующих объединения программной логики в чистом коде. Однако некоторые полезные библиотеки, такие как библиотека Fudgets для графических пользовательских интерфейсов и определенные эффективные парсеры, не поддавались переписыванию в монодической форме.

Отношение к теории категорий

В теории категорий категории Клейсли всех монад образуют собственное подмножество стрел Хьюза. Впоследствии было доказано, что стрелы являются еще более общими. Фактически, стрелы не просто эквивалентны, а непосредственно равны обогащенным категориям Фрейда.

Определение

Как и все классы типов, стрелки можно рассматривать как набор свойств, которые можно применить к любому типу данных. В языке программирования Haskell стрелки позволяют функциям (представленным в Haskell символом >) комбинироваться в объективированной форме. Однако, фактический термин "стрелка" может также происходить от того факта, что некоторые (но не все) стрелки соответствуют морфизмам (также известным как "стрелы" в теории категорий) различных категорий Клейсли. Поскольку это относительно новая концепция, единого стандартного определения не существует, но все формулировки логически эквивалентны, включают в себя определенные необходимые методы и строго подчиняются определенным математическим законам.