       print_spec(spec)
     else
       IO.puts "No specs for #{inspect module}.#{function}/#{arity} have been found"
+    end
+
+    :ok
+  end
+
+  @doc """
+  Prints the specs for a given MF.
+
+  ## Examples
+
+      s(Enum.all?)
+
+  """
+  def s(module, function) when is_atom(function) do
+    specs = lc {{f, _arity}, _spec} = spec inlist Kernel.Typespec.beam_specs(module),
+               f == function do
+      print_spec(spec)
+      spec
+    end
+
+    if specs == [] do
+      IO.puts "No specs for #{inspect module}.#{function} have been found"
+    end
+
+    :ok
+  end
+
+  def s(module, []) do
+    specs = lc spec inlist Kernel.Typespec.beam_specs(module), do: print_spec(spec)
+
+    if specs == [] do
+      IO.puts "No specs for #{inspect module} have been found"
     end
 
     :ok

    end
  end

  defmacro s(module) do
    quote do
      s(unquote(module), :all)
    end
  end

  @doc false
  def s(module, :all) do
    specs = lc spec inlist Kernel.Typespec.beam_specs(module), do: print_spec(spec)

    if specs == [] do
      IO.puts "No specs for #{inspect module} have been found"
    end

    :ok
  end

  @doc """
  Prints the specs for a given function.

  ## Examples

      s(Enum.all?/2)
      s(Enum.t/0)

  """
  def s(module, function, arity) do


      t(Enum)
      t(Enum.t/0)
      t(Enum.t)

  """
  defmacro t({ :/, _, [{ { :., _, [mod, fun] }, _, [] }, arity] }) do
