Instruct.Make_transApply a transformation module and a semantics module to produce a new semantics module that uses the transformation state.
The module this creates won't do any transformations by itself, and its values are defined as identity functions. You need to override specific functions to apply transformations.
Define the semantics of our abstract language.
module F : SEM with type 'a exp = 'a T.from_exp and type 'a stm = 'a T.from_stmtype 'a stm = 'a T.stmA statement, generally some side-effecting code.
type 'a obs = 'a F.obsThe final evaluation result.
type 'a exp = 'a T.expAn expression.
type 'a ref = 'a F.refA mutable reference variable. This is not compatible with expressions.
Define an immutable binding. The string is used for pretty-printing.
Define a reference variable. The string is used for pretty-printing.
val unit : unit stmval int : int -> int expval float : float -> float expval string : string -> string expval bool : bool -> bool expCreate an ephemeral sequence from a function.
For a given character, call a function with its replacement string or character. The replacement can be the same character.
val buffer_create : unit -> Stdlib.Buffer.t expval dfmt : 
  (Stdlib.Format.formatter -> unit) ->
  (Stdlib.Format.formatter -> unit) exptype 'a promise = 'a F.promiseAn asynchronous computation.
This is necessary for JavaScript async/await syntax compatibility.
type untyped = F.untypedmodule type UNTYPED = sig ... endMake a new untyped wrapper. The string is used for pretty-printing.
module External : sig ... endData from the outside world that we need to decode.
type import = F.importInformation to import a function from external code.