module T::Private::Abstract::Data

def self.get(mod, key)

def self.get(mod, key)
  mod.instance_variable_get("@opus_abstract__#{key}")
end

def self.key?(mod, key)

def self.key?(mod, key)
  mod.instance_variable_defined?("@opus_abstract__#{key}")
end

def self.set(mod, key, value)

def self.set(mod, key, value)
  mod.instance_variable_set("@opus_abstract__#{key}", value)
end

def self.set_default(mod, key, default)

insert `key` with a value of `default` and return `default`.
Works like `setdefault` in Python. If key has already been set, return its value. If not,
def self.set_default(mod, key, default)
  if self.key?(mod, key)
    self.get(mod, key)
  else
    self.set(mod, key, default)
    default
  end
end