2016-06-25 14 views
7

В последнее время я читал о arrows, концепции, изобретенной более 10 лет назад. Это позволяет получать более статическую информацию о вычислениях по сравнению с монадами, но при этом все еще имеет силу вычислений в зависимости от предыдущих.Хорошие современные стрелки в действии?

Однако я не мог найти их в последних современных библиотеках. Например, attoparsec даже не имеет экземпляра Arrow, хотя стрелки были разработаны для ускорения разбора.

Есть ли хорошие примеры стрелок, используемых в разрабатываемых в настоящее время библиотеках или исполняемых файлах, которые приносят производительность или другие преимущества?

(Я понимаю, что это своего рода мягкого вопроса - моя цель состоит в том, чтобы получить лучшее понимание этой концепции и ее преимущества.)

+0

Я узнал, что [_Netwire_] (https://wiki.haskell.org/Netwire) - хороший пример. В частности ['Wire'] (https://hackage.haskell.org/package/netwire-5.0.1/docs/Control-Wire-Core.html#t:Wire) реализует до' ArrowChoice', но не 'Monad '. –

ответ

1

Checkout this tutorial для opaleye. Стрелки широко используются повсюду (в дополнение к профуниторам). Библиотека предлагает способ писать сложные, типичные запросы Postgres. У меня нет большого опыта использования этого, но похоже, что это хорошо спроектированная библиотека, и, вероятно, это хороший выбор, если вы используете Postgres в бэкэнд. Бен Колера имеет хорошее видео-введение в библиотеку here.