Elixirでモジュール外に公開する定数を定義する方法はあるのでしょうか?

モジュール内で使う場合はアットリビュートを使うのが一般的なようです。
http://elixir-ja.sena-net.works/getting_started/14.html#14.2-定数として---as-constants

一方で、モジュール外に公開する定数を定義したい場合はどのような方法を取るのが一般的でしょうか?
まず、下記コードの1のようなアットリビュートはモジュール外からは参照できません。
2のように関数を定数のように扱えば可能ですが、できれば3のような形式で定数は定数として扱えればと思っています。

defmodule Sample do
    # 1. アットリビュート(モジュール内でのみ参照可能)
    @private_const_value 1
    # 2. 関数を定数のように扱う(これは可能)
    def const_value_func, do: 3
    # 3. 定義イメージ(コンパイルエラー)
    PUBLIC_CONST_VALUE = 2
end

defmodule Client do
    def foo() do
        # 1. アットリビュートは他モジュールでは参照不可
        IO.puts "CONST = #{Sample.@private_const_value}"
        # 2. 関数を定数として使う
        IO.puts "CONST = #{Sample.const_value_func}"
        # 3. 他モジュールで定義した定数を参照
        IO.puts "CONST = #{Sample.PUBLIC_CONST_VALUE}"
    end
end

英語版にマルチポストしました。
https://stackoverflow.com/questions/47861754/how-to-define-shared-constant-on-elixir