Elevando una función de orden superior en Haskell

Estoy tratando de construir una función de tipo:

liftSumthing :: ((a -> m b) -> m b) -> (a -> t m b) -> t m b

dóndet es un transformador de mónada. Específicamente, estoy interesado en hacer esto:

liftSumthingIO :: MonadIO m => ((a -> IO b) -> IO b) -> (a -> m b) -> m b

Jugueteé con algunas librerías de hechicería de Haskell y fue en vano. ¿Cómo lo hago bien, o tal vez hay una solución lista en algún lugar que no encontré?

Respuestas a la pregunta(2)

Su respuesta a la pregunta