-- {-# LANGUAGE FieldSelectors #-} module Data.NT where -- Natural transformation newtype m ~> n = NT {forall {k} (m :: k -> *) (n :: k -> *). (m ~> n) -> forall (a :: k). m a -> n a runNT :: forall a. m a -> n a} runNT :: (m ~> n) -> m a -> n a runNT :: forall {k} (m :: k -> *) (n :: k -> *) (a :: k). (m ~> n) -> m a -> n a runNT (NT forall (a :: k). m a -> n a f) = m a -> n a forall (a :: k). m a -> n a f