Module Opacity

type t =
  1. | Opaque
    (*

    Always use the contract

    *)
  2. | Translucent
    (*

    Use the contract, and refine with the body if required

    *)
  3. | Transparent
    (*

    Always use the body

    *)