       [1, 2, 3, 1, 2]
 
   """
-  @spec cycle(Enumerable.t) :: Enumerable.t
+  @spec cycle(Enumerable.t()) :: Enumerable.t()
   def cycle(enumerable)
 
   def cycle([]) do

      3

  """
  @spec each(Enumerable.t, (element -> term)) :: Enumerable.t
  def each(enum, fun) do
    lazy enum, fn(f1) ->
      fn(x, acc) ->
        fun.(x)
        f1.(x, acc)
      end
    end
  end

  @doc """


  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
