summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacques Garrigue <garrigue at math.nagoya-u.ac.jp>2004-03-30 14:05:53 +0000
committerJacques Garrigue <garrigue at math.nagoya-u.ac.jp>2004-03-30 14:05:53 +0000
commitdd320eae1f3035ed41d40797bee1a35cd8b9707a (patch)
tree598be3d77df79204191c25e17bffd5a5055d0804
parentec84e8f2ec0091a12ca04dc50da9029b32b0dde2 (diff)
plus d'exemples
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@6175 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--testlabl/objvariant.ml33
1 files changed, 33 insertions, 0 deletions
diff --git a/testlabl/objvariant.ml b/testlabl/objvariant.ml
index d182b6994..3233e03c0 100644
--- a/testlabl/objvariant.ml
+++ b/testlabl/objvariant.ml
@@ -1,3 +1,5 @@
+(* use with [cvs update -r objvariants typing] *)
+
let f (x : [> ]) = x#m 3;;
let o = object method m x = x+2 end;;
f (`A o);;
@@ -7,3 +9,34 @@ let g = function `A x -> x#m 3 | `B x -> x#y;;
List.map g l;;
fun x -> ignore (x=f); List.map x l;;
fun (x : [< `A of _ | `B of _] -> int) -> ignore (x=f); List.map x l;;
+
+
+class cvar name =
+ object
+ method name = name
+ method print ppf = Format.pp_print_string ppf name
+ end
+
+type var = [`Var of cvar]
+
+class cint n =
+ object
+ method n = n
+ method print ppf = Format.pp_print_int ppf n
+ end
+
+class ['a] cadd (e1 : 'a) (e2 : 'a) =
+ object
+ constraint 'a = [> ]
+ method e1 = e1
+ method e2 = e2
+ method print ppf = Format.fprintf ppf "(%t, %t)" e1#print e2#print
+ end
+
+type 'a expr = [var | `Int of cint | `Add of 'a cadd]
+
+type expr1 = expr1 expr
+
+let print = Format.printf "%t@."
+
+let e1 : expr1 = `Add (new cadd (`Var (new cvar "x")) (`Int (new cint 2)))