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.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe