1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
(* TEST
expect;
*)
module A = struct
type r = int
type s = string
type t = unit
end;;
(* parens *)
type x = A.(r * s * t);;
[%%expect{|
module A : sig type r = int type s = string type t = unit end
type x = A.r * A.s * A.t
|}];;
(* variants *)
type a = A.[ `X of r | `Y of s | `Z of t ];;
[%%expect{|
type a = [ `X of A.r | `Y of A.s | `Z of A.t ]
|}];;
(* first class modules *)
module Comparable = struct
module type S = sig
type t
val compare : t -> t -> int
end
end
type t = Comparable.(module S)
[%%expect{|
module Comparable :
sig module type S = sig type t val compare : t -> t -> int end end
type t = (module Comparable.S)
|}];;
|