module Data.Profunctor.Distributing where import Data.Profunctor import Data.Functor.Rep distribute' :: (Closed p, Representable g) => p a b -> p (g a) (g b) distribute' :: p a b -> p (g a) (g b) distribute' = (g a -> Rep g -> a) -> ((Rep g -> b) -> g b) -> p (Rep g -> a) (Rep g -> b) -> p (g a) (g b) forall (p :: * -> * -> *) a b c d. Profunctor p => (a -> b) -> (c -> d) -> p b c -> p a d dimap g a -> Rep g -> a forall (f :: * -> *) a. Representable f => f a -> Rep f -> a index (Rep g -> b) -> g b forall (f :: * -> *) a. Representable f => (Rep f -> a) -> f a tabulate (p (Rep g -> a) (Rep g -> b) -> p (g a) (g b)) -> (p a b -> p (Rep g -> a) (Rep g -> b)) -> p a b -> p (g a) (g b) forall b c a. (b -> c) -> (a -> b) -> a -> c . p a b -> p (Rep g -> a) (Rep g -> b) forall (p :: * -> * -> *) a b x. Closed p => p a b -> p (x -> a) (x -> b) closed