Can the type be resolved?

In order to resolve open types, the formal types must make sence.

Example

class A[E]
end
class B[F]
end
E.can_resolve_for(A[Int])  #->  true, E make sense in A

E.can_resolve_for(B[Int])  #->  false, E does not make sense in B

B[E].can_resolve_for(A[F], B[Object])  #->  true,
# B[E] is a red hearing only the E is important,
# E make sense in A

REQUIRE: anchor != null implies not anchor.need_anchor

REQUIRE: mtype.need_anchor implies anchor != null and mtype.can_resolve_for(anchor, null, mmodule)

ENSURE: not self.need_anchor implies result == true

Property definitions

nitc $ MType :: can_resolve_for
	# Can the type be resolved?
	#
	# In order to resolve open types, the formal types must make sence.
	#
	# ## Example
	#
	#     class A[E]
	#     end
	#     class B[F]
	#     end
	#
	# ~~~nitish
	# E.can_resolve_for(A[Int])  #->  true, E make sense in A
	#
	# E.can_resolve_for(B[Int])  #->  false, E does not make sense in B
	#
	# B[E].can_resolve_for(A[F], B[Object])  #->  true,
	# # B[E] is a red hearing only the E is important,
	# # E make sense in A
	# ~~~
	#
	# REQUIRE: `anchor != null implies not anchor.need_anchor`
	# REQUIRE: `mtype.need_anchor implies anchor != null and mtype.can_resolve_for(anchor, null, mmodule)`
	# ENSURE: `not self.need_anchor implies result == true`
	fun can_resolve_for(mtype: MType, anchor: nullable MClassType, mmodule: MModule): Bool is abstract
src/model/model.nit:1165,2--1189,99

nitc $ MClassType :: can_resolve_for
	redef fun can_resolve_for(mtype, anchor, mmodule) do return true
src/model/model.nit:1320,2--65

nitc $ MProxyType :: can_resolve_for
	redef fun can_resolve_for(mtype, anchor, mmodule)
	do
		return self.mtype.can_resolve_for(mtype, anchor, mmodule)
	end
src/model/model.nit:1792,2--1795,4

nitc $ MNullType :: can_resolve_for
	redef fun can_resolve_for(mtype, anchor, mmodule) do return true
src/model/model.nit:1904,2--65

nitc $ MBottomType :: can_resolve_for
	redef fun can_resolve_for(mtype, anchor, mmodule) do return true
src/model/model.nit:1930,2--65

nitc $ MErrorType :: can_resolve_for
	redef fun can_resolve_for(mtype, anchor, mmodule) do return true
src/model/model.nit:1954,2--65

nitc $ MInitType :: can_resolve_for
	redef fun can_resolve_for(mtype, anchor, mmodule) do return true
src/vm/virtual_machine.nit:901,2--65

nitc $ MRawType :: can_resolve_for
	redef fun can_resolve_for(mtype, anchor, mmodule) do
		not_available
		return true
	end
src/doc/model_ext.nit:44,2--47,4

nitc $ MGenericType :: can_resolve_for
	redef fun can_resolve_for(mtype, anchor, mmodule)
	do
		if not need_anchor then return true
		for t in arguments do
			if not t.can_resolve_for(mtype, anchor, mmodule) then return false
		end
		return true
	end
src/model/model.nit:1457,2--1464,4

nitc $ MVirtualType :: can_resolve_for
	redef fun can_resolve_for(mtype, anchor, mmodule)
	do
		if mtype.need_anchor then
			assert anchor != null
			mtype = mtype.anchor_to(mmodule, anchor)
		end
		return mtype.has_mproperty(mmodule, mproperty)
	end
src/model/model.nit:1607,2--1614,4

nitc $ MParameterType :: can_resolve_for
	redef fun can_resolve_for(mtype, anchor, mmodule)
	do
		if mtype.need_anchor then
			assert anchor != null
			mtype = mtype.anchor_to(mmodule, anchor)
		end
		return mtype.collect_mclassdefs(mmodule).has(mclass.intro)
	end
src/model/model.nit:1760,2--1767,4