blob: 73151ec9ebd32e3975c3cbbb17f491d1a2f9013f (
plain)
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
|
(* TEST
flags = " -w -a ";
setup-ocamlc.byte-build-env;
ocamlc.byte;
check-ocamlc.byte-output;
*)
module Classdef = struct
class virtual ['a, 'b, 'c] cl0 =
object
constraint 'c = < m : 'a -> 'b -> int; .. >
end
class virtual ['a, 'b] cl1 =
object
method virtual raise_trouble : int -> 'a
method virtual m : 'a -> 'b -> int
end
class virtual ['a, 'b] cl2 =
object
method virtual as_cl0 : ('a, 'b, ('a, 'b) cl1) cl0
end
end
module M : sig
type refer = { poly : 'a 'b 'c . (('b, 'c) #Classdef.cl2 as 'a) }
end = struct
type refer = { poly : 'a 'b 'c . (('b, 'c) #Classdef.cl2 as 'a) }
end
type refer1 = < poly : 'a 'b 'c . (('b, 'c) #Classdef.cl2 as 'a) >
type refer2 = < poly : 'a 'b 'c . (('b, 'c) #Classdef.cl2 as 'a) >
(* Now this works too *)
let f (x : refer1) = (x : refer2)
|