Safe Haskell  SafeInfered 

 newtype FactoryArrow m n i o = FactoryArrow {
 runFactory :: m (Kleisli n i o)
Documentation
newtype FactoryArrow m n i o Source
An Arrow
that constructs an associated monadic computation.
FactoryArrow  

(Monad m, Monad n) => ArrowChoice (FactoryArrow m n)  A choice is constructed at factory time whether or not the constructed action is ever evaluated. 
(Monad m, Monad n) => Arrow (FactoryArrow m n)  
(Monad m, MonadPlus n) => ArrowZero (FactoryArrow m n)  
(Monad m, MonadPlus n) => ArrowPlus (FactoryArrow m n)  As with ArrowChoice, both branches are constructed at factory time whether or not the constructed actions are ever evaluated. 
Monad m => ArrowApply (FactoryArrow m m)  Careful! To implement ArrowApply, the factory action must run imbedded in the constructed action. 
(Monad m, MonadFix n) => ArrowLoop (FactoryArrow m n)  
(Monad m, Monad n) => Category (FactoryArrow m n) 