jon.recoil.org

Module Subst.Unsafe

Unsafe substitutions introduced by with constraints, local substitutions (type t := int * int) or recursive module check.

val add_modtype : Ident.t -> Types.module_type -> 'any Subst.subst -> Subst.Unsafe.t

Replacing a module type name S by a non-path signature is unsafe as the packed module type (module S) becomes ill-formed.

val add_modtype_path : Path.t -> Types.module_type -> 'any Subst.subst -> Subst.Unsafe.t
val add_type_path : Path.t -> Path.t -> Subst.Unsafe.t -> Subst.Unsafe.t

Deep editing inside a module type require to retypecheck the module, for applicative functors in path and module aliases.

val add_type_function : Path.t -> params:Types.type_expr list -> body:Types.type_expr -> Subst.Unsafe.t -> Subst.Unsafe.t
val add_module_path : Path.t -> Path.t -> Subst.Unsafe.t -> Subst.Unsafe.t
type error =
  1. | Fcm_type_substituted_away of Path.t * Types.module_type
type 'a res := ('a, Subst.Unsafe.error) Stdlib.result

Composition of substitutions is eager and fails when the two substitution are incompatible, for example module type t := sig end is not compatible with module type s := sig type t=(module t) end