   ## drop_while
 
   defp do_drop_while([h|t], fun) do
-    case fun.(h) do
-      x in [false, nil] -> [h|t]
-      _ -> do_drop_while(t, fun)
+    if fun.(h) do
+      do_drop_while(t, fun)
+    else
+      [h|t]
     end
   end
 

  end

  defp do_find_index({ h, next }, iterator, counter, fun) do
    case fun.(h) do
      x in [false, nil] -> do_find_index(iterator.(next), iterator, counter + 1, fun)
      _ -> counter
    end
  end


  ## take_while

  defp do_take_while([h|t], fun) do
    if fun.(h) do
      [h|do_take_while(t, fun)]
    else
      []
    end
  end

