Поднятие функции высшего порядка в Хаскеле
Я пытаюсь построить функцию типа:
liftSumthing :: ((a -> m b) -> m b) -> (a -> t m b) -> t m b
гдеt
это монадный трансформатор. В частности, я заинтересован в этом:
liftSumthingIO :: MonadIO m => ((a -> IO b) -> IO b) -> (a -> m b) -> m b
Я возился с некоторыми волшебными библиотеками Хаскелла, но безрезультатно. Как я могу сделать это правильно, или, может быть, где-то есть готовое решение, которое я не нашел?