class Optionality {

	public static boolean is_deep_optional_of(DataType opt, DataType inner) {
		Ensure.not_null(opt);
		Ensure.not_null(inner);
		
		if (!(opt instanceof OptionalDataType)) {
			return false;
		}
		
		OptionalDataType odt = (OptionalDataType) opt;
		if (odt.inner_type() == inner) {
			return true;
		}
		
		return is_deep_optional_of(odt.inner_type(), inner);
	}

	private  Optionality();

}