...
## Applicative
One of the main bottlenecks of arrows is the heavy tuple handling, but
most (if not all) arrows form a family of applicative functors. I
noticed a huge speedup by moving from arrow style to applicative style
where possible:
liftA2 (+) (lmap f c) (fmap g d)
is often much faster than:
arr (uncurry (+)) . (c . arr f &&& arr g . d)
Besides being more readable it sometimes improved the performance of my
code by an order of magnitude. So perhaps check to see if the category
forms an applicative functor. If it does, you can get along without
Arrow entirely.