module Data.Profunctor.Utils where import Data.Profunctor import Data.Profunctor.NonLinear import Control.Category ((>>>), Category) class Branch p where branch :: p a b -> p b Bool -> p a (Either b b) choose :: (Category p, Branch p, NonLinear p, Strong p) => p b Bool -> p a b -> p a (Either b b) choose :: p b Bool -> p a b -> p a (Either b b) choose predicate :: p b Bool predicate p :: p a b p = p a b -> p b Bool -> p a (Either b b) forall (p :: * -> * -> *) a b. Branch p => p a b -> p b Bool -> p a (Either b b) branch p a b p p b Bool predicate