       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


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

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

    end
  end

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

  defmacro t(module) do
    quote do
      t(unquote(module), [])
    end
  end


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

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

    :ok
  end

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

    if types == [] do
