public void AddNewValue(string identifier, VariableState value)
        {
            if (VariableStates.ContainsKey(identifier)) //New variable in a different scope
            {
                Logger.Log("Removing existing state for " + identifier);
                Variables.Remove(identifier);
            }

            Logger.Log($"Adding state for {identifier} ({value})");
            Variables.Add(identifier, value);
        }
        public void AddOrUpdateValue(string identifier, VariableState value)
        {
            if (VariableStates.ContainsKey(identifier)) //Override existing value
            {
                VariableStates[identifier].Replace(value);
                Logger.Log($"Updating state for {identifier} ({value})");
            }
            else
            {
                //Unexpected state
                Logger.Log($"Adding state for {identifier} ({value})");

                Variables.Add(identifier, value);
            }
        }
        public void MergeValue(string identifier, VariableState value)
        {
            if (VariableStates.ContainsKey(identifier)) //Override existing value
            {
                var state    = VariableStates[identifier];
                var newState = state.Merge(value);
                Variables.Remove(identifier);
                Variables.Add(identifier, newState);
                if (DebugMode)
                {
                    Logger.Log($"Merging state for {identifier} ({newState})");
                }
            }
            else
            {
                //Unexpected state
                if (DebugMode)
                {
                    Logger.Log($"Merging state for {identifier} ({value}) .. /!\\ unexpected state");
                }

                Variables.Add(identifier, value);
            }
        }