module Data.Profunctor.Product.Newtype where import qualified Data.Profunctor as P class Newtype t where constructor :: a -> t a field :: t a -> a pNewtype :: (P.Profunctor p, Newtype t) => p a b -> p (t a) (t b) pNewtype :: p a b -> p (t a) (t b) pNewtype = (t a -> a) -> (b -> t b) -> p a b -> p (t a) (t b) forall (p :: * -> * -> *) a b c d. Profunctor p => (a -> b) -> (c -> d) -> p b c -> p a d P.dimap t a -> a forall (t :: * -> *) a. Newtype t => t a -> a field b -> t b forall (t :: * -> *) a. Newtype t => a -> t a constructor