code: public static Type.Record[] typeRecordFieldFilter(Type.Record[] types, Tuple<Identifier> fields) {
  		Type.Record[] result = new Type.Record[types.length];
  		for (int i = 0; i != result.length; ++i) {
  			Type.Record ith = types[i];
  			if (compareFields(ith, fields)) {
  				result[i] = ith;
  			}
  		}
  		return ArrayUtils.removeAll(result, null);
  	}
docs: Given an array of record types, filter out those which do not contain exactly
  the given set of fields. For example, consider this snippet:
  
  <pre>
  method f(int x):
  {int f}|{int g} xs = {f: x}
  ...
  </pre>
  
  When type checking the expression <code>{f: x}</code> the flow type checker
  will attempt to determine an <i>expected</i> record type. In order to then
  determine the appropriate expected type for field initialiser expression
  <code>x</code> it filters <code>{int f}|{int g}</code> down to just
  <code>{int f}</code>.
  
  @param types
  @param fields
  @param resolver
  @return