一些使用箭頭的函數在成對使用時非常方便。但我不明白這些功能的類型是如何與一對相結合的。一般來說,我發現箭頭相關函數的類型相當混亂。一對如何與箭頭函數的類型相結合
例如,我們有first :: a b c -> a (b, d) (c, d)
,這對我來說意義不大。但它可以被用來,比如說,增加一對的第一個數字:
Prelude Control.Arrow> :t first (+1)
first (+1) :: (Num b) => (b, d) -> (b, d)
而且
Prelude Control.Arrow> :t (&&&)
(&&&) :: (Arrow a) => a b c -> a b c' -> a b (c, c')
Prelude Control.Arrow> :t (pred &&& succ)
(pred &&& succ) :: (Enum b) => b -> (b, b)
可能有人請解釋這是如何工作的?