run :: RunTimeState st obj 
    -> RunTimeM st obj a 
    -> IO (Either obj (RunTimeState st obj))
run s a = runExceptT $ execStateT a s
run :: RunTimeState st obj 
    -> RunTimeM st obj a 
    -> IO (Either obj (RunTimeState st obj))
run s a = runExceptT $ execStateT a s
run s a = runExceptT $ execStateT a s