class Steep::TypeInference::TypeEnv

def get(const: nil, gvar: nil, ivar: nil)

| (ivar: Symbol) { () -> void } -> AST::Type
| (gvar: Symbol) { () -> void } -> AST::Type
@type method assert: (const: Names::Module) { () -> void } -> AST::Type
def get(const: nil, gvar: nil, ivar: nil)
  case
  when const
    if const_types.key?(const)
      const_types[const]
    else
      const_env.lookup(const).yield_self do |type|
        if type
          type
        else
          yield
          AST::Types::Any.new
        end
      end
    end
  else
    lookup_dictionary(ivar: ivar, gvar: gvar) do |var_name, dictionary|
      if dictionary.key?(var_name)
        dictionary[var_name]
      else
        yield
        AST::Types::Any.new
      end
    end
  end
end