Я не знаю какой-либо полной документации по повторному связыванию нотации proc
- я думаю, что это в той категории, которую они там бросили, потому что это имело смысл иметь, но нет какой-либо четкой мотивации примеров для его использования пока нет.
Я провел быстрый эмпирический тест, включив соответствующие расширения, предоставив фиктивные функции отскока, а затем изучив ошибки типов. То, что я увидел, было примерно так:
arr :: (a -> b) -> t a b
(>>>) :: t a b -> t b c -> t a c
first :: t a b -> t (a, c) (b, c)
Я предполагаю, что остальные функции похожи. Грубо говоря, это те же типы, что и стандартные функции, за исключением только ограничения Arrow
в контексте.