E.g.:
{-# LANGUAGE DefaultSignatures #-}
class MonadLayer m => MonadLayerFunctor m where
layerMap :: (forall b. Inner m b -> Inner m b) -> m a -> m a
default layerMap :: MonadTransFunctor m => (forall b. Inner m b -> Inner m b) -> m a -> m a
layerMap = transMap
This way having an instance of MonadTransFunctor, the user will be able to skip the layerMap = transMap part in the instance declaration of MonadLayerFunctor.
E.g.:
{-# LANGUAGE DefaultSignatures #-} class MonadLayer m => MonadLayerFunctor m where layerMap :: (forall b. Inner m b -> Inner m b) -> m a -> m a default layerMap :: MonadTransFunctor m => (forall b. Inner m b -> Inner m b) -> m a -> m a layerMap = transMapThis way having an instance of
MonadTransFunctor, the user will be able to skip thelayerMap = transMappart in the instance declaration ofMonadLayerFunctor.