sig   module Type :     sig       type 'a or_bottom = [ `Bottom | `Value of 'a ]       val ( >>- ) :         'Bottom.Type.or_bottom ->         ('-> 'Bottom.Type.or_bottom) -> 'Bottom.Type.or_bottom       val ( >>-: ) :         'Bottom.Type.or_bottom -> ('-> 'b) -> 'Bottom.Type.or_bottom     end   type 'a or_bottom = [ `Bottom | `Value of 'a ]   val ( >>- ) : 'a or_bottom -> ('-> 'b or_bottom) -> 'b or_bottom   val ( >>-: ) : 'a or_bottom -> ('-> 'b) -> 'b or_bottom   val non_bottom : 'a or_bottom -> 'a   val equal : ('-> '-> bool) -> 'a or_bottom -> 'a or_bottom -> bool   val is_included :     ('-> '-> bool) -> 'a or_bottom -> 'a or_bottom -> bool   val join : ('-> '-> 'a) -> 'a or_bottom -> 'a or_bottom -> 'a or_bottom   val narrow :     ('-> '-> 'a or_bottom) ->     'a or_bottom -> 'a or_bottom -> 'a or_bottom   val pretty :     (Format.formatter -> '-> unit) ->     Format.formatter -> 'a or_bottom -> unit   module Make_Datatype :     functor (Domain : Datatype.S->       sig         type t = Domain.t or_bottom         val ty : t Type.t         val name : string         val descr : t Descr.t         val packed_descr : Structural_descr.pack         val reprs : t list         val equal : t -> t -> bool         val compare : t -> t -> int         val hash : t -> int         val pretty_code : Format.formatter -> t -> unit         val internal_pretty_code :           Type.precedence -> Format.formatter -> t -> unit         val pretty : Format.formatter -> t -> unit         val varname : t -> string         val mem_project : (Project_skeleton.t -> bool) -> t -> bool         val copy : t -> t       end   module Bound_Lattice :     functor (Lattice : Lattice_type.Join_Semi_Lattice->       sig         type t = Lattice.t or_bottom         val ty : t Type.t         val name : string         val descr : t Descr.t         val packed_descr : Structural_descr.pack         val reprs : t list         val equal : t -> t -> bool         val compare : t -> t -> int         val hash : t -> int         val pretty_code : Format.formatter -> t -> unit         val internal_pretty_code :           Type.precedence -> Format.formatter -> t -> unit         val pretty : Format.formatter -> t -> unit         val varname : t -> string         val mem_project : (Project_skeleton.t -> bool) -> t -> bool         val copy : t -> t         val join : t -> t -> t         val is_included : t -> t -> bool         val join_and_is_included : t -> t -> t * bool         val bottom : t       end   val bot_of_list : 'a list -> 'a list or_bottom   val list_of_bot : 'a list or_bottom -> 'a list   val add_to_list : 'a or_bottom -> 'a list -> 'a list   module Top :     sig       type 'a or_top_bottom = [ `Bottom | `Top | `Value of 'a ]       val join :         ('-> '-> 'a) ->         'Bottom.Top.or_top_bottom ->         'Bottom.Top.or_top_bottom -> 'Bottom.Top.or_top_bottom       val narrow :         ('-> '-> 'a or_bottom) ->         'Bottom.Top.or_top_bottom ->         'Bottom.Top.or_top_bottom -> 'Bottom.Top.or_top_bottom     end end