     :ok
   end
 
-  def s(module, []) do
-    specs = lc spec inlist beam_specs(module), do: print_spec(spec)
-
-    if specs == [] do
-      IO.puts  IO.ANSI.escape("%{red}No specs for #{inspect module} have been found")
-    end
-
-    :ok
-  end
-
-  @doc false
-  def s(module, function, arity) do
+  @doc false
+  def __spec__(module, function, arity) do
     specs = lc {_kind, {{f, a}, _spec}} = spec inlist beam_specs(module),
                f == function and a == arity do
       print_spec(spec)

    :ok
  end

  def t(module, []) do
    types = lc type inlist Kernel.Typespec.beam_types(module), do: print_type(type)

    if types == [] do
      IO.puts  IO.ANSI.escape("%{red}No types for #{inspect module} have been found")
    end

    :ok
  end

  @doc false
  def t(module, type, arity) do
    types = lc {_, {t, _, args}} = typespec inlist Kernel.Typespec.beam_types(module),
               length(args) == arity and t == type, do: typespec


  """
  defmacro t({ :/, _, [{ { :., _, [mod, fun] }, _, [] }, arity] }) do
    quote do
      IEx.Helpers.__type__(unquote(mod), unquote(fun), unquote(arity))
    end
  end

  defmacro t({ { :., _, [mod, fun] }, _, [] }) do
    quote do
      IEx.Helpers.__type__(unquote(mod), unquote(fun))
    end
  end

  defmacro t(module) do
    quote do
      IEx.Helpers.__type__(unquote(module))
    end
  end

  @doc false
  def __type__(module) do
    types = lc type inlist Kernel.Typespec.beam_types(module), do: print_type(type)

    if types == [] do
      IO.puts  IO.ANSI.escape("%{red}No types for #{inspect module} have been found")
    end

    :ok
  end

  @doc false
  def __type__(module, type) when is_atom(type) do
    types = lc {_, {t, _, _args}} = typespec inlist Kernel.Typespec.beam_types(module),
               t == type do
      print_type(typespec)
