       [1, 2, 3, 4, 5]
 
   """
-  @spec take_while(Enumerable.t, (element -> as_boolean(term))) :: Enumerable.t
+  @spec take_while(Enumerable.t(), (element -> as_boolean(term))) :: Enumerable.t()
   def take_while(enum, fun) do
-    lazy enum, fn(f1) -> R.take_while(fun, f1) end
+    lazy(enum, fn f1 -> R.take_while(fun, f1) end)
   end
 
   @doc """

      [1, 2, 3]

  """
  @spec uniq(Enumerable.t) :: Enumerable.t
  def uniq(enum) do
    uniq_by(enum, fn x -> x end)
  end


  defp do_unfold(next_acc, next_fun, {:cont, acc}, fun) do
    case next_fun.(next_acc) do
      nil -> {:done, acc}
      {v, next_acc} -> do_unfold(next_acc, next_fun, fun.(v, acc), fun)
    end
  end
