         stream.on 'end', ()->
             fn null, Buffer.concat(data, length), stream
 
+    ##
+    ##
+    ##
+    argsLoggingCallback: (fn, logger)->
+        logger ?= console
+        return (args...)->
+
+            for arg in args
+                logger.log arg
+            fn.apply null, args
+
 ##
 ##
 ##


        ##
        next()

    ##
    ##

    ##
    ##
    ##
    keys: (objs...)->
        ## empty
        if !objs.length
            return []

        ## only one -> return its keys
        if objs.length = 1
            return (key for key of objs[0])

        ## many -> concat distinct
        keys = objects.keys objs.pop()

        if objs.length
            for obj in objs
                for key in objects.keys obj # length 1 recursion
                    if keys.indexOf(key) is -1
                        keys.push key

        return keys



    ##
