   r: (source, withBlock, whenBlock, into) ->
     return into unless source?
 
+    withBlock ||= returnSecond
+
     e source,
       if intoSet = into != undefined
-            (v, k, __, w)-> into = withBlock into, v, k, w
-      else  (v, k, __, w)-> into = if intoSet then withBlock into, v, k, w else intoSet = true; v
+            (v, k) -> into = withBlock into, v, k
+      else  (v, k) -> into = if intoSet then withBlock into, v, k else intoSet = true; v
       whenBlock
 
     into

    withBlock ||= returnFirst

    e source,
      (v, k, into, w) -> into[keyBlock v, k, into, w] = withBlock v, k, into, w
      whenBlock
      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

