Я пытаюсь построить функцию типа:
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
Я возился с некоторыми волшебными библиотеками Haskell, но безрезультатно. Как мне это получить верно, или, может быть, где-то есть готовое решение, которое я не нашел?