
Thanks Brent, this should do the trick, although what I was asking was something more general: For "explicitly pass" I meant passing them without the eta reduce, in other terms: swapA' :: (Arrow a) => a ((b,c), (b,c)) (c,b) swapA' t = (????) swapFirst >>> swapSecond (???) where swapFirst = first $ arr snd swapSecond = second $ arr fst where the question marks indicate that I don't know how to tell swapFirst "hey, even though from the outside I'm passing you a tuple *t*, you have to take as input a (t,t)." Hope this is clearer or it has some sense at all, maybe I'm not getting correctly the way arrows work! bye, A. Like this?
swapA' = dup >>> swapFirst >>> swapSecond where dup = id &&& id ...
I'm afraid I'm not confident I really understand your question, however, so if that doesn't answer it, try asking again!
-Brent
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe