Elixirではネストされたモジュールとその親の間には何の関係もないので,ネストしたモジュール内でそのモジュール自身を参照するときは,いちいち頭からモジュール名を全部打っていかないといけません.

defmodule Game.User do
  defstruct [:name, :level]

  def new(name, level) do
    # %User{...} ではダメ
    %Game.User{name: name, level: level}
  end
end

これを解決するために,以下のようにモジュール内で自分自身へのエイリアスを張ることができます.

defmodule Game.User do
  alias Game.User

  defstruct [:name, :level]

  def new(name, level) do
    %User{name: name, level: level}
  end
end

こうすれば,単にUserと書くだけでGame.Userにアクセスできるので,少しだけ書くのが楽になります.

これをもう少しだけ楽に書くtipsとして、以下のようなものがよく使われているようです.

defmodule Game.User do
  alias __MODULE__

  defstruct [:name, :level]

  def new(name, level) do
    %User{name: name, level: level}
  end
end

Game.User内では__MODULE__ == Game.Userなので,これは先ほどのalias Game.Userと意味的に同じになり,UserGame.Userの意味で使えるようになるという理屈です.