-- {-# 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