4 ms·
They are standard. There's also `first` and `second`, but they do something different: Prelude> :m + Control.Arrow Prelude Control.Arrow> :t first
by vito 16y ago
They are standard. There's also `first` and `second`, but they do something different:
Prelude> :m + Control.Arrow
Prelude Control.Arrow> :t first
first :: (Arrow a) => a b c -> a (b, d) (c, d)
Prelude Control.Arrow> first (2 +) (1, 4)
(3,4)
In this case the Arrow instance is just (->), the function type constructor, so you could read that strange type signature as `first :: (b -> c) -> ((b, d) -> (c, d))`. But I've said too much.