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