(* 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