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