docs: def flatten(input_list):
      """Return a flattened genertor from an input list.
  
      Usage:
  
          input_list = [['a'], ['b', 'c', 'd'], [['e']], ['f']]
          list(flatten(input_list))
          >> ['a', 'b', 'c', 'd', 'e', 'f']
      """
      for el in input_list:
          if isinstance(el, collections.Iterable) \
                  and not isinstance(el, basestring):
              for sub in flatten(el):
                  yield sub
          else:
              yield el