ProjectionRepresentation of projections from closures and blocks.
type project_closure = {set_of_closures : Variable.t;must yield a set of closures
*)closure_id : Closure_id.t;}The selection of one closure given a set of closures, required before a function defined by said set of closures can be applied. See more detailed documentation below on set_of_closures.
type move_within_set_of_closures = {closure : Variable.t;must yield a closure
*)start_from : Closure_id.t;move_to : Closure_id.t;}The selection of one closure given another closure in the same set of closures. See more detailed documentation below on set_of_closures. The move_to closure must be part of the free variables of start_from.
type project_var = {closure : Variable.t;must yield a closure
*)closure_id : Closure_id.t;var : Var_within_closure.t;}The selection from a closure of a variable bound by said closure. In other words, access to a function's environment. Also see more detailed documentation below on set_of_closures.
val print_project_closure : Format.formatter -> project_closure -> unitval print_move_within_set_of_closures :
Format.formatter ->
move_within_set_of_closures ->
unitval print_project_var : Format.formatter -> project_var -> unitval compare_project_var : project_var -> project_var -> intval compare_project_closure : project_closure -> project_closure -> intval compare_move_within_set_of_closures :
move_within_set_of_closures ->
move_within_set_of_closures ->
inttype t = | Project_var of project_var| Project_closure of project_closure| Move_within_set_of_closures of move_within_set_of_closures| Field of int * Variable.tinclude Identifiable.S with type t := tmodule T : Identifiable.Thing with type t = tinclude Identifiable.Thing with type t := T.tinclude Hashtbl.HashedType with type t := T.tval hash : T.t -> intA hashing function on keys. It must be such that if two keys are equal according to equal, then they have identical hash values as computed by hash.
The hash value of a key should remain constant as long as the key is in the table. In particular, if the hash function depends on mutable key data, then that data must not be mutated while the key is in the table. Similarly, as the hash function may be called while the table itself is being modified, it should avoid accessing the table as part of its computation.
Examples: suitable (equal, hash) pairs for arbitrary key types include
(=), hash) for comparing objects by structure (provided objects do not contain floats)(fun x y -> compare x y = 0), hash) for comparing objects by structure and handling Stdlib.nan correctly(==), hash) for comparing objects by physical equality (e.g. for mutable or cyclic objects).include Map.OrderedType with type t := T.tA total ordering function over the keys. This is a two-argument function f such that f e1 e2 is zero if the keys e1 and e2 are equal, f e1 e2 is strictly negative if e1 is smaller than e2, and f e1 e2 is strictly positive if e1 is greater than e2. Example: a suitable ordering function is the generic structural comparison function Stdlib.compare.
val output : out_channel -> T.t -> unitval print : Format.formatter -> T.t -> unitmodule Set : Identifiable.Set with module T := Tmodule Map : Identifiable.Map with module T := Tmodule Tbl : Identifiable.Tbl with module T := Tval projecting_from : t -> Variable.tReturn which variable the given projection projects from.
val map_projecting_from : t -> f:(Variable.t -> Variable.t) -> tChange the variable that the given projection projects from.