module Bottom:sig..end
Types, monads and utilitary functions for lattices in which the bottom is managed separately from other values.
module Type:sig..end
include Bottom.Type
val is_bottom : 'a or_bottom -> bool
val non_bottom : 'a or_bottom -> 'a
val equal : ('a -> 'a -> bool) -> 'a or_bottom -> 'a or_bottom -> bool
val compare : ('a -> 'a -> int) -> 'a or_bottom -> 'a or_bottom -> int
val is_included : ('a -> 'b -> bool) -> 'a or_bottom -> 'b or_bottom -> bool
val join : ('a -> 'a -> 'a) -> 'a or_bottom -> 'a or_bottom -> 'a or_bottom
val join_list : ('a -> 'a -> 'a) -> 'a or_bottom list -> 'a or_bottom
val narrow : ('a -> 'a -> 'a or_bottom) -> 'a or_bottom -> 'a or_bottom -> 'a or_bottom
val pretty : (Stdlib.Format.formatter -> 'a -> unit) ->
Stdlib.Format.formatter -> 'a or_bottom -> unit
val iter : ('a -> unit) -> 'a or_bottom -> unit
module Make_Datatype:
Datatype constructor.
module Bound_Lattice:functor (Lattice:Lattice_type.Join_Semi_Lattice) ->Lattice_type.Bounded_Join_Semi_Latticewith type t = Lattice.t or_bottom
Bounds a semi-lattice.
In a lattice where the elements are lists of non-bottom values, the empty list is the bottom case.
val to_list : 'a or_bottom -> 'a listConversion functions.
val bot_of_list : 'a list -> 'a list or_bottom
val list_of_bot : 'a list or_bottom -> 'a list
val all : 'a or_bottom list -> 'a list
val add_to_list : 'a or_bottom -> 'a list -> 'a listelt >:: list adds elt to the list if it is not bottom.
module Top:sig..end
Lattices in which both top and bottom are managed separately