119 lines
2.1 KiB
OCaml
119 lines
2.1 KiB
OCaml
|
|
open Ppx_sexp_conv_lib.Conv
|
||
|
|
|
||
|
|
type t = float [@@deriving sexp]
|
||
|
|
|
||
|
|
module M : sig
|
||
|
|
type t = float list [@@deriving sexp]
|
||
|
|
end = struct
|
||
|
|
type nonrec t = t list [@@deriving sexp]
|
||
|
|
end
|
||
|
|
|
||
|
|
type 'a u = 'a [@@deriving sexp]
|
||
|
|
|
||
|
|
module M2 : sig
|
||
|
|
type 'a u = 'a list [@@deriving sexp]
|
||
|
|
end = struct
|
||
|
|
type nonrec 'a u = 'a u list [@@deriving sexp]
|
||
|
|
end
|
||
|
|
|
||
|
|
type 'a v = 'a w
|
||
|
|
and 'a w = A of 'a v [@@deriving sexp]
|
||
|
|
|
||
|
|
type 'a v_ = 'a v [@@deriving sexp]
|
||
|
|
type 'a w_ = 'a w [@@deriving sexp]
|
||
|
|
|
||
|
|
module M3 : sig
|
||
|
|
type 'a v = 'a w_ [@@deriving sexp]
|
||
|
|
type 'a w = 'a v_ [@@deriving sexp]
|
||
|
|
end = struct
|
||
|
|
type nonrec 'a v = 'a w
|
||
|
|
and 'a w = 'a v [@@deriving sexp]
|
||
|
|
end
|
||
|
|
|
||
|
|
type t0 = A of t0 [@@deriving sexp]
|
||
|
|
|
||
|
|
module B : sig
|
||
|
|
type nonrec t0 = t0 [@@deriving sexp]
|
||
|
|
end = struct
|
||
|
|
type nonrec t0 = t0 = A of t0 [@@deriving sexp]
|
||
|
|
end
|
||
|
|
|
||
|
|
type t1 = A of t2
|
||
|
|
and t2 = B of t1 [@@deriving sexp]
|
||
|
|
|
||
|
|
module C : sig
|
||
|
|
type nonrec t1 = t1 [@@deriving sexp]
|
||
|
|
type nonrec t2 = t2 [@@deriving sexp]
|
||
|
|
end = struct
|
||
|
|
type nonrec t1 = t1 = A of t2
|
||
|
|
and t2 = t2 = B of t1 [@@deriving sexp]
|
||
|
|
end
|
||
|
|
|
||
|
|
type 'a v1 = A of 'a v2
|
||
|
|
and 'a v2 = B of 'a v1 [@@deriving sexp]
|
||
|
|
|
||
|
|
module D : sig
|
||
|
|
type nonrec 'a v1 = 'a v1 [@@deriving sexp]
|
||
|
|
type nonrec 'a v2 = 'a v2 [@@deriving sexp]
|
||
|
|
end = struct
|
||
|
|
type nonrec 'a v1 = 'a v1 = A of 'a v2
|
||
|
|
and 'a v2 = 'a v2 = B of 'a v1 [@@deriving sexp]
|
||
|
|
end
|
||
|
|
|
||
|
|
type +'a w1
|
||
|
|
|
||
|
|
module E = struct
|
||
|
|
type nonrec +'a w1 = 'a w1
|
||
|
|
end
|
||
|
|
|
||
|
|
type 'a y1 = A of 'a y2
|
||
|
|
and 'a y2 = B of 'a y1
|
||
|
|
|
||
|
|
module F : sig
|
||
|
|
type nonrec 'a y2 = B of 'a y1
|
||
|
|
type nonrec 'a y1 = 'a y1
|
||
|
|
end = struct
|
||
|
|
type nonrec 'a y1 = 'a y1 = A of 'a y2
|
||
|
|
and 'a y2 = B of 'a y1
|
||
|
|
end
|
||
|
|
|
||
|
|
type z1 = A of z1
|
||
|
|
|
||
|
|
module G : sig
|
||
|
|
module A : sig
|
||
|
|
type z2 = A of z2
|
||
|
|
end
|
||
|
|
|
||
|
|
module B : sig
|
||
|
|
type z2 = A of z2
|
||
|
|
end
|
||
|
|
|
||
|
|
module C : sig
|
||
|
|
type z2 = A of z2
|
||
|
|
end
|
||
|
|
end = struct
|
||
|
|
type z2 = z1 = A of z1
|
||
|
|
|
||
|
|
module A = struct
|
||
|
|
type nonrec z2 = z1 = A of z2
|
||
|
|
end
|
||
|
|
|
||
|
|
module B = struct
|
||
|
|
type nonrec z2 = z2 = A of z2
|
||
|
|
end
|
||
|
|
|
||
|
|
module C = struct
|
||
|
|
type nonrec z2 = z2 = A of z1
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
type ('a, 'b) zz = A of 'a * 'b
|
||
|
|
|
||
|
|
module H = struct
|
||
|
|
type nonrec ('a, 'b) zz = ('a, 'b) zz = A of 'a * 'b
|
||
|
|
end
|
||
|
|
|
||
|
|
module I = struct
|
||
|
|
type nonrec 'a zz = ('a, 'a) zz
|
||
|
|
end
|