Module Prime_knowable

Optional Values with Type-Level Information about Presence

type (+_, _) t =
| Unknown : ('a[> `Unknown ]) t
| Known : 'a -> ('a[> `Known ]) t

('a, 'k) t is a type-enriched analogue of 'a option, where 'k determines whether the value is present or not.

val get : ('a[ `Known ]) t -> 'a

know k is the value held by the type-assured knowledge of it.

val get_opt : ('a[< `Known | `Unknown ]) t -> 'a option

get_opt k is Option.map know (inquire k).

val of_option : 'a option -> ('a[> `Known | `Unknown ]) t

of_option None is Unknown and knowable_of_option (Some x) is Known x.

val inquire : ('a[< `Known | `Unknown ]) t -> ('a[> `Known ]) t option

inquire k checks if k is known, and, if so, assures this fact in the returned copy.