Lifting de uma função de ordem superior em Haskell

Estou tentando construir uma função do tipo:

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

Ondet é um transformador de mônada. Especificamente, estou interessado em fazer isso:

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

Eu brinquei com algumas bibliotecas de magia Haskell e sem sucesso. Como faço para acertar, ou talvez exista uma solução pronta em algum lugar que não encontrei?

questionAnswers(2)

yourAnswerToTheQuestion