     withBlock ||= returnFirst
 
     eachWhile source,
-      if whenBlock then   (v, k, into, w) -> found   = withBlock v, k, null, w; false
-      else                (v, k, into, w) -> !(found = withBlock v, k, null, w)
+      if whenBlock then   (v, k) -> found   = withBlock v, k; false
+      else                (v, k) -> !(found = withBlock v, k)
       whenBlock
       found = undefined
 


  into = source if into == undefined

  if arrayIterableTest source
    if whenBlock
      for v, k in source when w = whenBlock v, k
        break unless withBlock v, k, into, w
    else
      for v, k in source
        break unless withBlock v, k, into
  else
    if whenBlock
      for k, v of source when w = whenBlock v, k
        break unless withBlock v, k, into, w
    else
      for k, v of source
        break unless withBlock v, k, into

  into



    if source?
      if arrayIterableTest source
        if whenBlock then withBlock v, k, into for v, k in source when whenBlock v, k
        else              withBlock v, k, into for v, k in source
      else
        if whenBlock then withBlock v, k, into for k, v of source when whenBlock v, k
        else              withBlock v, k, into for k, v of source

    into

