Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file environment.ml
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283open!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,injectivity))asparam)->letloc=core_type.ptyp_locinletname=get_type_param_nameparaminmatch(variance,injectivity)with|((NoVariance|Covariant),NoInjectivity)->letpat,expr=gensymcovariantlocinpat,`Covariant(name.txt,expr)|(Contravariant,NoInjectivity)->letpat,expr=gensymcontravariantlocinpat,`Contravariant(name.txt,expr)|(_,Injective)->Location.raise_errorf~loc"Injective type parameters aren't supported.")|>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;;