Make datatypes passing keyworded arguments to the constructor.

    This is a factory function; returns the actual `peek` routine.

    Arguments:

        init (callable): type constructor.

        args (iterable): arguments NOT to be keyworded; order does matter.

    Returns:

        callable: deserializer (`peek` routine).

    All the peeked attributes that are not referenced in `args` are passed to `init` as
    keyworded arguments.

def peek_with_kwargs(init, args=[]):
    """
    Make datatypes passing keyworded arguments to the constructor.

    This is a factory function; returns the actual `peek` routine.

    Arguments:

        init (callable): type constructor.

        args (iterable): arguments NOT to be keyworded; order does matter.

    Returns:

        callable: deserializer (`peek` routine).

    All the peeked attributes that are not referenced in `args` are passed to `init` as
    keyworded arguments.
    """
    def peek(store, container, _stack=None):
        return init(\
            *[ store.peek(attr, container, _stack=_stack) for attr in args ], \
            **dict([ (attr, store.peek(attr, container, _stack=_stack)) \
                for attr in container if attr not in args ]))
    return peek