+instance Arrow a => Functor (WrappedArrow a b) where
+ fmap f (WrapArrow a) = WrapArrow (a >>> arr f)
+
+instance Arrow a => Applicative (WrappedArrow a b) where
+ pure x = WrapArrow (arr (const x))
+ WrapArrow f <*> WrapArrow v = WrapArrow (f &&& v >>> arr (uncurry id))
+
+instance (ArrowZero a, ArrowPlus a) => Alternative (WrappedArrow a b) where
+ empty = WrapArrow zeroArrow
+ WrapArrow u <|> WrapArrow v = WrapArrow (u <+> v)