code: public boolean isContractive(QualifiedName nid, Type type) {
  		HashSet<QualifiedName> visited = new HashSet<>();
  		return isContractive(nid, type, visited);
  	}
docs: <p>
  Contractive types are types which cannot accept value because they have an
  <i>unterminated cycle</i>. An unterminated cycle has no leaf nodes
  terminating it. For example, <code>X<{X field}></code> is contractive, where
  as <code>X<{null|X field}></code> is not.
  </p>
  
  <p>
  This method returns true if the type is contractive, or contains a
  contractive subcomponent. For example, <code>null|X<{X field}></code> is
  considered contracted.
  </p>
  
  @param type
  --- type to test for contractivity.
  @return
  @throws ResolveError