module ArrowClasses( module ArrowReadShow , module ArrowEnv , module ArrowClasses) where import Tools(bool2Either) import ArrowReadShow import ArrowEnv class (ArrowChoice q, ReaderArrow r q) => ReaderArrowChoice r q where ifpeek :: (r -> Bool) -> q a b -> q a b -> q a b ifpeek p t e = peek >>> arr (first p >>> uncurry bool2Either) >>> (t ||| e) class (Arrow q, Arrow (t q)) => ArrowTransformer t q where lift :: q a b -> t q a b -- embed a q arrow as a (t q) arrow