Module Melange_compiler_libs.Shape

module Uid: { ... };
module Sig_component_kind: { ... };
module Item: { ... };
type var = Ident.t;
type t = {
  1. uid: option(Uid.t),
  2. desc: desc,
};
and desc =
  1. | Var(var)
  2. | Abs(var, t)
  3. | App(t, t)
  4. | Struct(Item.Map.t(t))
  5. | Leaf
  6. | Proj(t, Item.t)
  7. | Comp_unit(string)
;
let print: Stdlib.Format.formatter => t => unit;
let for_unnamed_functor_param: var;
let fresh_var: ?name:string => Uid.t => (var, t);
let var: Uid.t => Ident.t => t;
let abs: ?uid:Uid.t => var => t => t;
let app: ?uid:Uid.t => t => arg:t => t;
let str: ?uid:Uid.t => Item.Map.t(t) => t;
let proj: ?uid:Uid.t => t => Item.t => t;
let leaf: Uid.t => t;
let decompose_abs: t => option((var, t));
let for_persistent_unit: string => t;
let leaf_for_unpack: t;
module Map: { ... };
let dummy_mod: t;
let of_path: find_shape:(Sig_component_kind.t => Ident.t => t) => namespace:Sig_component_kind.t => Path.t => t;
let set_uid_if_none: t => Uid.t => t;
module Make_reduce: (Context: { ... }) => { ... };

The Make_reduce functor is used to generate a reduction function for shapes.

let local_reduce: t => t;