Spec

defmodule App1.Math do
  @spec sum(integer(), integer()) :: integer()
  def sum(a, b) do
    a + b
  end
end

Custom Type

defmodule App1.User do
  @type t() :: %__MODULE__{id: integer(), name: String.t()}
  defstruct name: "", id: 0
end
defmodule App1.Greeter do
  alias App1.User
  @spec greet(User.t()) :: String.t()
  def greet(%User{name: name}) do
    "Hello, #{name}"
  end
end