def hash_of?(key_clause, value_clause)
      all_keys   = many_with_map?(key_clause, "all keys")     { |kv| kv[0] }
      all_values = many_with_map?(value_clause, "all values") { |kv| kv[1] }
      all? Hash, all_keys, all_values
    end
def hash_of?(key_clause, value_clause)
      all_keys   = many_with_map?(key_clause, "all keys")     { |kv| kv[0] }
      all_values = many_with_map?(value_clause, "all values") { |kv| kv[1] }
      all? Hash, all_keys, all_values
    end
Passes if argument is a Hash and if the key and value clauses pass all
 of its keys and values, respectively.
 E.g. <tt>hash_of?(Symbol, String)</tt>:

   :foo => "bar", :baz => "qux" # passes
   :foo => "bar", "baz" => 3    # fails