cond :: GMCode -> GMCode -> GMState -> GMState
cond i1 i2 state 
    = putCode code' state'
    where
        state' = putStack stack state
        (a : stack) = getStack state
        is = getCode state
        code' = i ++ is
        i = getCodeStream i1 i2 (hLookup (getHeap state) a)
cond :: GMCode -> GMCode -> GMState -> GMState
cond i1 i2 state 
    = putCode code' state'
    where
        state' = putStack stack state
        (a : stack) = getStack state
        is = getCode state
        code' = i ++ is
        i = getCodeStream i1 i2 (hLookup (getHeap state) a)
cond i1 i2 state 
    = putCode code' state'
    where
        state' = putStack stack state
        (a : stack) = getStack state
        is = getCode state
        code' = i ++ is
        i = getCodeStream i1 i2 (hLookup (getHeap state) a)