jon.recoil.org

Module Jkind.Const

type 'd t constraint 'd = 'l * 'r

Constant jkinds are used for user-written annotations. They are not actually constant, though: they might contain variables in with-types. The "constant" refers to the fact that there are no sort variables here. The existence of with-types means, though, that we still need the allowance machinery here.

include Allowance.Allow_disallow with type (_, _, 'd) sided = 'd Jkind.Const.t
type (_, _, 'd) sided = 'd Jkind.Const.t
val disallow_right : ('a, 'b, 'l * 'r) Jkind.Const.sided -> ('a, 'b, 'l * Allowance.disallowed) Jkind.Const.sided

Disallows on the right.

val disallow_left : ('a, 'b, 'l * 'r) Jkind.Const.sided -> ('a, 'b, Allowance.disallowed * 'r) Jkind.Const.sided

Disallows a the left.

val allow_right : ('a, 'b, 'l * Allowance.allowed) Jkind.Const.sided -> ('a, 'b, 'l * 'r) Jkind.Const.sided

Generalizes a right-hand-side allowed to be any allowance.

val allow_left : ('a, 'b, Allowance.allowed * 'r) Jkind.Const.sided -> ('a, 'b, 'l * 'r) Jkind.Const.sided

Generalizes a left-hand-side allowed to be any allowance.

val to_out_jkind_const : 'd Jkind.Const.t -> Outcometree.out_jkind_const
val no_with_bounds_and_equal : 'd1 Jkind.Const.t -> 'd2 Jkind.Const.t -> bool

This returns true iff both types have no with-bounds and they are equal. Normally, we want an equality check to happen only on values that are allowed on both the left and the right. But a type with no with-bounds is allowed on the left and the right, so we test for that condition first before doing the proper equality check.

module Builtin : sig ... end