 
   defmacro __aggregate_specs__(module) do
     options = Module.read_attribute(module, :__typespec_options__)
-    specs = :lists.reverse(Module.read_attribute(module, :__specs__))
+    specs = List.reverse(Module.read_attribute(module, :__specs__))
     specs = :lists.ukeysort(1, lc {k, _} inlist specs, do: {k, :proplists.append_values(k, specs)})
     lc attr inlist specs, do: Module.add_attribute module, :spec, attr
     case options[:keep_data] do

  end

  defp typespec(t, vars, caller) when is_tuple(t) do
    quote do: {:type, 0, :tuple, unquote((lc e inlist tuple_to_list(t), do: typespec(e, vars, caller)))}
  end

  defp variable({name, line, _}) do

      _ -> lc arg inlist args, do: variable(arg)
    end
    spec = typespec(definition, (lc {:var, _, var} inlist args, do: var), caller)
    vars = lc ({:var, _, _} = var) inlist args, do: var
    type      = Macro.escape { name, spec, vars }
    type_attr = if options[:opaque], do: :opaque, else: :type
    quote do
      Module.add_attribute __MODULE__, unquote(type_attr), unquote(type)
