aに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 に手で押し込み、すべてを再度ボックス化する必要がありますか、それともこれを行う一般的な方法はありますか?
StateT MyState IO aところで、その sim パラメータは IO とは何の関係もない一連のステートフル関数であるため、回避できる場合はそれらすべてを返すことに少し気が進まないのです。