eval :: ProgramState -> Either String ProgramState
eval program = if null . programStack $ program
    then Right program
    else evalOneStep program >>= eval
eval :: ProgramState -> Either String ProgramState
eval program = if null . programStack $ program
    then Right program
    else evalOneStep program >>= eval
eval program = if null . programStack $ program
    then Right program
    else evalOneStep program >>= eval