Я считаю, что слово «обобщения» сбивает вас с пути. Если arr
- это Arrow
, действительно так:
arr x
для любого x
будет Applicative
; - В частности,
arr ()
будет аппликативом; - Затем этот аппликативный падеж может быть воспроизведен как эквивалентная c стрелка (в терминах
Static
из полугруппоидов , Static (arr ()) a b ~ arr () (a -> b)
)
Этот процесс, однако, не без потерь в общем случае: stati c стрелка Static (arr ())
не обязательно эквивалентна arr
стрелке, с которой мы начали; изоморфизма быть не должно. Другими словами, stati c стрелки не обобщают стрелки. Если бы мы определили класс StaticArrow
, он был бы подклассом Arrow
, а не суперклассом.
PS: В цитате из Викибука формулировка здесь просто акцент. Например, хотя стрелки Клейсли действительно являются стрелками Хьюза / Control.Arrow
, большую часть времени, когда люди говорят о «стрелах Клейсли», они думают не о примере Arrow
, а просто о том, как они являются морфизмами в категории, в которой категория l aws составляет монаду l aws для некоторой монады. В частности, этого достаточно, чтобы сформулировать обсуждение в этом отрывке из Викибука.