Подъем функции высшего порядка в Haskell

Я пытаюсь построить функцию типа:

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

18
задан zeus 11 February 2012 в 19:11
поделиться