code: def hashing(typed=True, strict=False):
      
      hashable_struct_producer = make_key if strict else make_key_hippie
  
      def _make_key(*args, **kwargs):
          ## use a list to avoid using hash of tuples...
          return hashable_struct_producer([list(args), kwargs], typed=typed)
      return _make_key
docs: Returns a typed and/or strict key callable.
  
      A strict key callable will fail on traditionaly non-hashable object,
      while a strict=False hashing will use hippie hashing that can hash
      mutable object.
  
      A typed key callable will use type of each object in the hash and will
      distinguish with same hash but different type (example: 2 and 2.0).