   defmacro defmacrocallback(spec) do
     pos = :elixir_locals.cache_env(__CALLER__)
     %{line: line, file: file, module: module} = __CALLER__
+
     quote do
-      Kernel.Typespec.defspec(:macrocallback, unquote(Macro.escape(spec, unquote: true)),
-                              unquote(line), unquote(file), unquote(module), unquote(pos))
+      Kernel.Typespec.defspec(
+        :macrocallback,
+        unquote(Macro.escape(spec, unquote: true)),
+        unquote(line),
+        unquote(file),
+        unquote(module),
+        unquote(pos)
+      )
     end
   end
 


  # Handle type operator
  defp typespec({:::, meta, [var, expr]}, vars, caller) do
    left  = typespec(var, [elem(var, 0) | vars], caller)
    right = typespec(expr, vars, caller)
    {:ann_type, line(meta), [left, right]}
  end

        for(arg <- args, do: variable(arg))
      end

    vars = for {:var, _, var} <- args, do: var
    spec = typespec(definition, vars, caller)
    vars = for {:var, _, _} = var <- args, do: var
    type = {name, spec, vars}
    arity = length(vars)

    {kind, export} =
      case kind do
        :type -> {:type, true}
        :typep -> {:type, false}
        :opaque -> {:opaque, true}
      end

    if builtin_type?(name, arity) do
      compile_error(caller, "type #{name}/#{arity} is a builtin type and it cannot be redefined")
    end

    {{kind, {name, arity}, type}, caller.line, export}
