Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file environment.ml
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182open!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"tyvar;;letof_alist~localist=matchMap.of_alist(moduleString)alistwith|`Okt->t|`Duplicate_keyname->invalid~loc"duplicate type parameter: '%s"name;;letcreate~loc~prefixparam_list=letpat_list,alist=List.mapparam_list~f:(fun((core_type,_)asparam)->letloc=core_type.ptyp_locinletname=get_type_param_nameparaminletpat,expr=gensymprefixlocinpat,(name.txt,Okexpr))|>List.unzipinlett=of_alist~localistinpat_list,t;;letvariance_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"tyvaractualexpect;;letcreate_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=gensymcovariantlocinpat,`Covariant(name.txt,expr)|Contravariant->letpat,expr=gensymcontravariantlocinpat,`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:contravariantintyvar,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:covariantintyvar,Error{fail})|>of_alist~locinpat_list,`Covariantcovariant_t,`Contravariantcontravariant_t;;