
20 Feb
2010
20 Feb
'10
6:11 a.m.
Anyway, for yours: try to implement (.) :: Property b c -> Property a b -> Property a c, and first :: Property a b -> Property (a,c) (b,c). Then you will have an arrow.
(.) = flip (>==>)
first p = p >==< pure id
No, not quite. \p -> p >==< pure id :: Property a b -> Property a (b, a) What you want is first p = (pure fst >==> p) >==< (pure snd) which has the required type.