(* type variables *)
type 'a t = 'a list
let f (a : 'a list) : 'a = List.hd a

(* polymorphic variants *)
type t = [ `A | `B ]

(* variants *)
type result = Sat | Unsat | Unknown

(* module and module types *)
module type S = sig
  val compute : unit -> unit
end
module Impl : S = struct
  let compute () = ()
end
