push :: Int -> GMState -> GMState
push n state 
    = putStack (a:as) state
    where
    as = getStack state
    a = as !! n
push :: Int -> GMState -> GMState
push n state 
    = putStack (a:as) state
    where
    as = getStack state
    a = as !! n
push n state 
    = putStack (a:as) state
    where
    as = getStack state
    a = as !! n