Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file environment.ml
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677open!Importtype'aor_raise=|Okof'a|Errorof{fail:'a.loc:location->'a}typet=(string,expressionor_raise,String.comparator_witness)Map.tletempty=Map.empty(moduleString)letlookupt~loc~tyvar=matchMap.findttyvarwith|Some(Okexpr)->expr|Some(Error{fail})->fail~loc|None->invalid~loc"unbound type variable: '%s"tyvarletof_alist~localist=matchMap.of_alist(moduleString)alistwith|`Okt->t|`Duplicate_keyname->invalid~loc"duplicate type parameter: '%s"nameletcreate~loc~prefixparam_list=letpat_list,alist=List.mapparam_list~f:(fun((core_type,_)asparam)->letloc=core_type.ptyp_locinletname=get_type_param_nameparaminletpat,expr=gensymprefixlocin(pat,(name.txt,Okexpr)))|>List.unzipinlett=of_alist~localistinpat_list,tletvariance_error~loc~tyvar~actual~expect=invalid~loc"misuse of type variable '%s: would confuse %s with %s in generated code; \
could be due to a missing or incorrect covariance/contravariance annotation"tyvaractualexpectletcreate_with_variance~loc~covariant~contravariantparam_list=letpat_list,by_variance_list=List.mapparam_list~f:(fun((core_type,variance)asparam)->letloc=core_type.ptyp_locinletname=get_type_param_nameparaminmatchvariancewith|Invariant|Covariant->letpat,expr=gensymcovariantlocin(pat,`Covariant(name.txt,expr))|Contravariant->letpat,expr=gensymcontravariantlocin(pat,`Contravariant(name.txt,expr)))|>List.unzipinletcovariant_t=List.mapby_variance_list~f:(function|`Covariant(tyvar,expr)->(tyvar,Okexpr)|`Contravariant(tyvar,_)->letfail~loc=variance_error~loc~tyvar~expect:covariant~actual:contravariantin(tyvar,Error{fail}))|>of_alist~locinletcontravariant_t=List.mapby_variance_list~f:(function|`Contravariant(tyvar,expr)->(tyvar,Okexpr)|`Covariant(tyvar,_)->letfail~loc=variance_error~loc~tyvar~expect:contravariant~actual:covariantin(tyvar,Error{fail}))|>of_alist~locinpat_list,`Covariantcovariant_t,`Contravariantcontravariant_t