Cyclic module usage error

We don’t need to be that drastic in fact, we can just move the Handle definition higher up in the file. This will work:

defmodule Cycle do
  defmodule Handle do
    defstruct resource: nil, reference: nil

    def wrap_resource(resource) do
      %__MODULE__{
        resource: resource,
        reference: make_ref()
      }
    end
  end

  def hello(%Handle{resource: _resource}) do
    :world
  end
end

Note that the alias is also not needed.

I use this style quite often with my GenServers to define Options and State structs, like this example: lib/geo_therminator/pump_api/device/server.ex · 8fa72cbfa5b0402c46c53e13e5e994bf5a390f89 · Mikko Ahlroth / GeoTherminator · GitLab