Поднимите, чтобы зафиксировать * внутреннюю часть * монадного стека трансформаторов.

Предположим, у меня естьIO Int завернутый вStateT MyStateтогда у меня есть значениеState MyState Int который я хочу использовать в сложенной монаде. Как мне поднять это в этом внутреннем смысле? Я уже знаю использоватьlift или жеliftIO если я получаю что-то совместимое с внутренней частью, которую мне просто нужно поднять к внешней монаде, но теперь у меня возникает противоположная проблема: значение уже во внешней монаде, но не во внутренней.

Например:

checkSame :: State MyState a -> IO a -> StateT MyState IO Bool
checkSame sim real = do
  rres <- liftIO real
  sres <- ??? sim 
  return $ rres == sres

Должен ли я «получить» состояние, протолкнуть его через runState вручную и собрать все заново, или есть какой-то общий способ сделать это?

Кстати, этот параметр sim - это целая куча функций с состоянием, которые не имеют ничего общего с IO, поэтому я не очень-то хочу заставить их все вернутьсяStateT MyState IO a если я могу избежать этого.

Ответы на вопрос(1)

Ваш ответ на вопрос