diff options
Diffstat (limited to 'testlabl')
| -rw-r--r-- | testlabl/.cvsignore | 1 | ||||
| -rw-r--r-- | testlabl/Makefile | 17 | ||||
| -rw-r--r-- | testlabl/bugs/yamagata021012.ml | 193 | ||||
| -rw-r--r-- | testlabl/dirs_multimatch | 1 | ||||
| -rw-r--r-- | testlabl/dirs_poly | 1 | ||||
| -rw-r--r-- | testlabl/mixin.ml | 146 | ||||
| -rw-r--r-- | testlabl/mixin2.ml | 179 | ||||
| -rw-r--r-- | testlabl/mixin3.ml | 173 | ||||
| -rw-r--r-- | testlabl/multimatch.ml | 157 | ||||
| -rw-r--r-- | testlabl/newlabels.ps | 1458 | ||||
| -rw-r--r-- | testlabl/poly.exp | 332 | ||||
| -rw-r--r-- | testlabl/poly.exp2 | 339 | ||||
| -rw-r--r-- | testlabl/poly.ml | 468 | ||||
| -rw-r--r-- | testlabl/printers.ml | 11 | ||||
| -rw-r--r-- | testlabl/tests.ml | 22 |
15 files changed, 0 insertions, 3498 deletions
diff --git a/testlabl/.cvsignore b/testlabl/.cvsignore deleted file mode 100644 index 4c57147b38..0000000000 --- a/testlabl/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.out *.out2
\ No newline at end of file diff --git a/testlabl/Makefile b/testlabl/Makefile deleted file mode 100644 index f75e7007dd..0000000000 --- a/testlabl/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -# $Id$ -# Test extensions - -CAMLTOP=../boot/ocamlrun ../ocaml -I ../stdlib - -test: test-poly - -test-poly: - TERM=norepeat $(CAMLTOP) < poly.ml > poly.out 2>&1 - TERM=norepeat $(CAMLTOP) -principal < poly.ml > poly.out2 2>&1 - @diff poly.exp poly.out && echo ocaml OK || echo ocaml changed - @diff poly.exp2 poly.out2 && echo ocaml -principal OK \ - || echo ocaml -principal changed - -promote: - mv poly.out poly.exp - mv poly.out2 poly.exp2 diff --git a/testlabl/bugs/yamagata021012.ml b/testlabl/bugs/yamagata021012.ml deleted file mode 100644 index 212a1683fa..0000000000 --- a/testlabl/bugs/yamagata021012.ml +++ /dev/null @@ -1,193 +0,0 @@ -(* The module begins *) -exception Out_of_range - -class type ['a] cursor = - object - method get : 'a - method incr : unit -> unit - method is_last : bool - end - -class type ['a] storage = - object ('self) - method first : 'a cursor - method len : int - method nth : int -> 'a cursor - method copy : 'self - method sub : int -> int -> 'self - method concat : 'a storage -> 'self - method fold : 'b. ('a -> int -> 'b -> 'b) -> 'b -> 'b - method iter : ('a -> unit) -> unit - end - -class virtual ['a, 'cursor] storage_base = - object (self : 'self) - constraint 'cursor = 'a #cursor - method virtual first : 'cursor - method virtual len : int - method virtual copy : 'self - method virtual sub : int -> int -> 'self - method virtual concat : 'a storage -> 'self - method fold : 'b. ('a -> int -> 'b -> 'b) -> 'b -> 'b = fun f a0 -> - let cur = self#first in - let rec loop count a = - if count >= self#len then a else - let a' = f cur#get count a in - cur#incr (); loop (count + 1) a' - in - loop 0 a0 - method iter proc = - let p = self#first in - for i = 0 to self#len - 2 do proc p#get; p#incr () done; - if self#len > 0 then proc p#get else () - end - -class type ['a] obj_input_channel = - object - method get : unit -> 'a - method close : unit -> unit - end - -class type ['a] obj_output_channel = - object - method put : 'a -> unit - method flush : unit -> unit - method close : unit -> unit - end - -module UChar = -struct - - type t = int - - let highest_bit = 1 lsl 30 - let lower_bits = highest_bit - 1 - - let char_of c = - try Char.chr c with Invalid_argument _ -> raise Out_of_range - - let of_char = Char.code - - let code c = - if c lsr 30 = 0 - then c - else raise Out_of_range - - let chr n = - if n >= 0 && (n lsr 31 = 0) then n else raise Out_of_range - - let uint_code c = c - let chr_of_uint n = n - -end - -type uchar = UChar.t - -let int_of_uchar u = UChar.uint_code u -let uchar_of_int n = UChar.chr_of_uint n - -class type ucursor = [uchar] cursor - -class type ustorage = [uchar] storage - -class virtual ['ucursor] ustorage_base = [uchar, 'ucursor] storage_base - -module UText = -struct - -(* the internal representation is UCS4 with big endian*) -(* The most significant digit appears first. *) -let get_buf s i = - let n = Char.code s.[i] in - let n = (n lsl 8) lor (Char.code s.[i + 1]) in - let n = (n lsl 8) lor (Char.code s.[i + 2]) in - let n = (n lsl 8) lor (Char.code s.[i + 3]) in - UChar.chr_of_uint n - -let set_buf s i u = - let n = UChar.uint_code u in - begin - s.[i] <- Char.chr (n lsr 24); - s.[i + 1] <- Char.chr (n lsr 16 lor 0xff); - s.[i + 2] <- Char.chr (n lsr 8 lor 0xff); - s.[i + 3] <- Char.chr (n lor 0xff); - end - -let init_buf buf pos init = - if init#len = 0 then () else - let cur = init#first in - for i = 0 to init#len - 2 do - set_buf buf (pos + i lsl 2) (cur#get); cur#incr () - done; - set_buf buf (pos + (init#len - 1) lsl 2) (cur#get) - -let make_buf init = - let s = String.create (init#len lsl 2) in - init_buf s 0 init; s - -class text_raw buf = - object (self : 'self) - inherit [cursor] ustorage_base - val contents = buf - method first = new cursor (self :> text_raw) 0 - method len = (String.length contents) / 4 - method get i = get_buf contents (4 * i) - method nth i = new cursor (self :> text_raw) i - method copy = {< contents = String.copy contents >} - method sub pos len = - {< contents = String.sub contents (pos * 4) (len * 4) >} - method concat (text : ustorage) = - let buf = String.create (String.length contents + 4 * text#len) in - String.blit contents 0 buf 0 (String.length contents); - init_buf buf (String.length contents) text; - {< contents = buf >} - end -and cursor text i = - object - val contents = text - val mutable pos = i - method get = contents#get pos - method incr () = pos <- pos + 1 - method is_last = (pos + 1 >= contents#len) - end - -class string_raw buf = - object - inherit text_raw buf - method set i u = set_buf contents (4 * i) u - end - -class text init = text_raw (make_buf init) -class string init = string_raw (make_buf init) - -let of_string s = - let buf = String.make (4 * String.length s) '\000' in - for i = 0 to String.length s - 1 do - buf.[4 * i] <- s.[i] - done; - new text_raw buf - -let make len u = - let s = String.create (4 * len) in - for i = 0 to len - 1 do set_buf s (4 * i) u done; - new string_raw s - -let create len = make len (UChar.chr 0) - -let copy s = s#copy - -let sub s start len = s#sub start len - -let fill s start len u = - for i = start to start + len - 1 do s#set i u done - -let blit src srcoff dst dstoff len = - for i = 0 to len - 1 do - let u = src#get (srcoff + i) in - dst#set (dstoff + i) u - done - -let concat s1 s2 = s1#concat (s2 (* : #ustorage *) :> uchar storage) - -let iter proc s = s#iter proc -end diff --git a/testlabl/dirs_multimatch b/testlabl/dirs_multimatch deleted file mode 100644 index b449514644..0000000000 --- a/testlabl/dirs_multimatch +++ /dev/null @@ -1 +0,0 @@ -parsing typing bytecomp driver toplevel
\ No newline at end of file diff --git a/testlabl/dirs_poly b/testlabl/dirs_poly deleted file mode 100644 index 3aec606ed4..0000000000 --- a/testlabl/dirs_poly +++ /dev/null @@ -1 +0,0 @@ -bytecomp byterun driver parsing stdlib tools toplevel typing utils otherlibs/labltk/browser/searchpos.ml diff --git a/testlabl/mixin.ml b/testlabl/mixin.ml deleted file mode 100644 index b08e7cdfc7..0000000000 --- a/testlabl/mixin.ml +++ /dev/null @@ -1,146 +0,0 @@ -(* $Id$ *) - -open StdLabels -open MoreLabels - -(* Use maps for substitutions and sets for free variables *) - -module Subst = Map.Make(struct type t = string let compare = compare end) -module Names = Set.Make(struct type t = string let compare = compare end) - - -(* Variables are common to lambda and expr *) - -type var = [`Var of string] - -let subst_var ~subst : var -> _ = - function `Var s as x -> - try Subst.find s subst - with Not_found -> x - -let free_var : var -> _ = function `Var s -> Names.singleton s - - -(* The lambda language: free variables, substitutions, and evaluation *) - -type 'a lambda = [`Var of string | `Abs of string * 'a | `App of 'a * 'a] - -let free_lambda ~free_rec : _ lambda -> _ = function - #var as x -> free_var x - | `Abs (s, t) -> Names.remove s (free_rec t) - | `App (t1, t2) -> Names.union (free_rec t1) (free_rec t2) - -let map_lambda ~map_rec : _ lambda -> _ = function - #var as x -> x - | `Abs (s, t) as l -> - let t' = map_rec t in - if t == t' then l else `Abs(s, t') - | `App (t1, t2) as l -> - let t'1 = map_rec t1 and t'2 = map_rec t2 in - if t'1 == t1 && t'2 == t2 then l else `App (t'1, t'2) - -let next_id = - let current = ref 3 in - fun () -> incr current; !current - -let subst_lambda ~subst_rec ~free ~subst : _ lambda -> _ = function - #var as x -> subst_var ~subst x - | `Abs(s, t) as l -> - let used = free t in - let used_expr = - Subst.fold subst ~init:[] - ~f:(fun ~key ~data acc -> - if Names.mem s used then data::acc else acc) in - if List.exists used_expr ~f:(fun t -> Names.mem s (free t)) then - let name = s ^ string_of_int (next_id ()) in - `Abs(name, - subst_rec ~subst:(Subst.add ~key:s ~data:(`Var name) subst) t) - else - map_lambda ~map_rec:(subst_rec ~subst:(Subst.remove s subst)) l - | `App _ as l -> - map_lambda ~map_rec:(subst_rec ~subst) l - -let eval_lambda ~eval_rec ~subst l = - match map_lambda ~map_rec:eval_rec l with - `App(`Abs(s,t1), t2) -> - eval_rec (subst ~subst:(Subst.add ~key:s ~data:t2 Subst.empty) t1) - | t -> t - -(* Specialized versions to use on lambda *) - -let rec free1 x = free_lambda ~free_rec:free1 x -let rec subst1 ~subst = subst_lambda ~subst_rec:subst1 ~free:free1 ~subst -let rec eval1 x = eval_lambda ~eval_rec:eval1 ~subst:subst1 x - - -(* The expr language of arithmetic expressions *) - -type 'a expr = - [`Var of string | `Num of int | `Add of 'a * 'a - | `Neg of 'a | `Mult of 'a * 'a] - -let free_expr ~free_rec : _ expr -> _ = function - #var as x -> free_var x - | `Num _ -> Names.empty - | `Add(x, y) -> Names.union (free_rec x) (free_rec y) - | `Neg x -> free_rec x - | `Mult(x, y) -> Names.union (free_rec x) (free_rec y) - -(* Here map_expr helps a lot *) -let map_expr ~map_rec : _ expr -> _ = function - #var as x -> x - | `Num _ as x -> x - | `Add(x, y) as e -> - let x' = map_rec x and y' = map_rec y in - if x == x' && y == y' then e - else `Add(x', y') - | `Neg x as e -> - let x' = map_rec x in - if x == x' then e else `Neg x' - | `Mult(x, y) as e -> - let x' = map_rec x and y' = map_rec y in - if x == x' && y == y' then e - else `Mult(x', y') - -let subst_expr ~subst_rec ~subst : _ expr -> _ = function - #var as x -> subst_var ~subst x - | #expr as e -> map_expr ~map_rec:(subst_rec ~subst) e - -let eval_expr ~eval_rec e = - match map_expr ~map_rec:eval_rec e with - `Add(`Num m, `Num n) -> `Num (m+n) - | `Neg(`Num n) -> `Num (-n) - | `Mult(`Num m, `Num n) -> `Num (m*n) - | #expr as e -> e - -(* Specialized versions *) - -let rec free2 x = free_expr ~free_rec:free2 x -let rec subst2 ~subst = subst_expr ~subst_rec:subst2 ~subst -let rec eval2 x = eval_expr ~eval_rec:eval2 x - - -(* The lexpr language, reunion of lambda and expr *) - -type lexpr = - [ `Var of string | `Abs of string * lexpr | `App of lexpr * lexpr - | `Num of int | `Add of lexpr * lexpr | `Neg of lexpr - | `Mult of lexpr * lexpr ] - -let rec free : lexpr -> _ = function - #lambda as x -> free_lambda ~free_rec:free x - | #expr as x -> free_expr ~free_rec:free x - -let rec subst ~subst:s : lexpr -> _ = function - #lambda as x -> subst_lambda ~subst_rec:subst ~subst:s ~free x - | #expr as x -> subst_expr ~subst_rec:subst ~subst:s x - -let rec eval : lexpr -> _ = function - #lambda as x -> eval_lambda ~eval_rec:eval ~subst x - | #expr as x -> eval_expr ~eval_rec:eval x - -(* A few examples: -eval1 (`App(`Abs("x",`Var"x"), `Var"y"));; -eval2 (`Add(`Mult(`Num 3,`Neg(`Num 2)), `Var"x"));; -eval (`Add(`App(`Abs("x",`Mult(`Var"x",`Var"x")),`Num 2), `Num 5));; -*) diff --git a/testlabl/mixin2.ml b/testlabl/mixin2.ml deleted file mode 100644 index fa56857340..0000000000 --- a/testlabl/mixin2.ml +++ /dev/null @@ -1,179 +0,0 @@ -(* $Id$ *) - -(* Full fledge version, using objects to structure code *) - -open StdLabels -open MoreLabels - -(* Use maps for substitutions and sets for free variables *) - -module Subst = Map.Make(struct type t = string let compare = compare end) -module Names = Set.Make(struct type t = string let compare = compare end) - -(* To build recursive objects *) - -let lazy_fix make = - let rec obj () = make (lazy (obj ()) : _ Lazy.t) in - obj () - -let (!!) = Lazy.force - -(* The basic operations *) - -class type ['a, 'b] ops = - object - method free : 'b -> Names.t - method subst : sub:'a Subst.t -> 'b -> 'a - method eval : 'b -> 'a - end - -(* Variables are common to lambda and expr *) - -type var = [`Var of string] - -class ['a] var_ops = object (self : ('a, var) #ops) - constraint 'a = [> var] - method subst ~sub (`Var s as x) = - try Subst.find s sub with Not_found -> x - method free (`Var s) = - Names.singleton s - method eval (#var as v) = v -end - -(* The lambda language: free variables, substitutions, and evaluation *) - -type 'a lambda = [`Var of string | `Abs of string * 'a | `App of 'a * 'a] - -let next_id = - let current = ref 3 in - fun () -> incr current; !current - -class ['a] lambda_ops (ops : ('a,'a) #ops Lazy.t) = - let var : 'a var_ops = new var_ops - and free = lazy !!ops#free - and subst = lazy !!ops#subst - and eval = lazy !!ops#eval in - object (self : ('a, 'a lambda) #ops) - constraint 'a = [> 'a lambda] - method free = function - #var as x -> var#free x - | `Abs (s, t) -> Names.remove s (!!free t) - | `App (t1, t2) -> Names.union (!!free t1) (!!free t2) - - method map ~f = function - #var as x -> x - | `Abs (s, t) as l -> - let t' = f t in - if t == t' then l else `Abs(s, t') - | `App (t1, t2) as l -> - let t'1 = f t1 and t'2 = f t2 in - if t'1 == t1 && t'2 == t2 then l else `App (t'1, t'2) - - method subst ~sub = function - #var as x -> var#subst ~sub x - | `Abs(s, t) as l -> - let used = !!free t in - let used_expr = - Subst.fold sub ~init:[] - ~f:(fun ~key ~data acc -> - if Names.mem s used then data::acc else acc) in - if List.exists used_expr ~f:(fun t -> Names.mem s (!!free t)) then - let name = s ^ string_of_int (next_id ()) in - `Abs(name, - !!subst ~sub:(Subst.add ~key:s ~data:(`Var name) sub) t) - else - self#map ~f:(!!subst ~sub:(Subst.remove s sub)) l - | `App _ as l -> - self#map ~f:(!!subst ~sub) l - - method eval l = - match self#map ~f:!!eval l with - `App(`Abs(s,t1), t2) -> - !!eval (!!subst ~sub:(Subst.add ~key:s ~data:t2 Subst.empty) t1) - | t -> t -end - -(* Operations specialized to lambda *) - -let lambda = lazy_fix (new lambda_ops) - -(* The expr language of arithmetic expressions *) - -type 'a expr = - [ `Var of string | `Num of int | `Add of 'a * 'a - | `Neg of 'a | `Mult of 'a * 'a] - -class ['a] expr_ops (ops : ('a,'a) #ops Lazy.t) = - let var : 'a var_ops = new var_ops - and free = lazy !!ops#free - and subst = lazy !!ops#subst - and eval = lazy !!ops#eval in - object (self : ('a, 'a expr) #ops) - constraint 'a = [> 'a expr] - method free = function - #var as x -> var#free x - | `Num _ -> Names.empty - | `Add(x, y) -> Names.union (!!free x) (!!free y) - | `Neg x -> !!free x - | `Mult(x, y) -> Names.union (!!free x) (!!free y) - - method map ~f = function - #var as x -> x - | `Num _ as x -> x - | `Add(x, y) as e -> - let x' = f x and y' = f y in - if x == x' && y == y' then e - else `Add(x', y') - | `Neg x as e -> - let x' = f x in - if x == x' then e else `Neg x' - | `Mult(x, y) as e -> - let x' = f x and y' = f y in - if x == x' && y == y' then e - else `Mult(x', y') - - method subst ~sub = function - #var as x -> var#subst ~sub x - | #expr as e -> self#map ~f:(!!subst ~sub) e - - method eval (#expr as e) = - match self#map ~f:!!eval e with - `Add(`Num m, `Num n) -> `Num (m+n) - | `Neg(`Num n) -> `Num (-n) - | `Mult(`Num m, `Num n) -> `Num (m*n) - | e -> e - end - -(* Specialized versions *) - -let expr = lazy_fix (new expr_ops) - -(* The lexpr language, reunion of lambda and expr *) - -type 'a lexpr = [ 'a lambda | 'a expr ] - -class ['a] lexpr_ops (ops : ('a,'a) #ops Lazy.t) = - let lambda = new lambda_ops ops in - let expr = new expr_ops ops in - object (self : ('a, 'a lexpr) #ops) - constraint 'a = [> 'a lexpr] - method free = function - #lambda as x -> lambda#free x - | #expr as x -> expr#free x - - method subst ~sub = function - #lambda as x -> lambda#subst ~sub x - | #expr as x -> expr#subst ~sub x - - method eval = function - #lambda as x -> lambda#eval x - | #expr as x -> expr#eval x -end - -let lexpr = lazy_fix (new lexpr_ops) - -(* A few examples: -lambda#eval (`App(`Abs("x",`Var"x"), `Var"y"));; -expr#eval (`Add(`Mult(`Num 3,`Neg(`Num 2)), `Var"x"));; -lexpr#eval (`Add(`App(`Abs("x",`Mult(`Var"x",`Var"x")),`Num 2), `Num 5));; -*) diff --git a/testlabl/mixin3.ml b/testlabl/mixin3.ml deleted file mode 100644 index daae839e6a..0000000000 --- a/testlabl/mixin3.ml +++ /dev/null @@ -1,173 +0,0 @@ -(* $Id$ *) - -(* Full fledge version, using objects to structure code *) - -open StdLabels -open MoreLabels - -(* Use maps for substitutions and sets for free variables *) - -module Subst = Map.Make(struct type t = string let compare = compare end) -module Names = Set.Make(struct type t = string let compare = compare end) - -(* To build recursive objects *) - -let lazy_fix make = - let rec obj () = make (lazy (obj ()) : _ Lazy.t) in - obj () - -let (!!) = Lazy.force - -(* The basic operations *) - -class type ['a, 'b] ops = - object - method free : 'b -> Names.t - method subst : sub:'a Subst.t -> 'b -> 'a - method eval : 'b -> 'a - end - -(* Variables are common to lambda and expr *) - -type var = [`Var of string] - -let var = object (self : ([>var], var) #ops) - method subst ~sub (`Var s as x) = - try Subst.find s sub with Not_found -> x - method free (`Var s) = - Names.singleton s - method eval (#var as v) = v -end - -(* The lambda language: free variables, substitutions, and evaluation *) - -type 'a lambda = [`Var of string | `Abs of string * 'a | `App of 'a * 'a] - -let next_id = - let current = ref 3 in - fun () -> incr current; !current - -let lambda_ops (ops : ('a,'a) #ops Lazy.t) = - let free = lazy !!ops#free - and subst = lazy !!ops#subst - and eval = lazy !!ops#eval in - object (self : ([> 'a lambda], 'a lambda) #ops) - method free = function - #var as x -> var#free x - | `Abs (s, t) -> Names.remove s (!!free t) - | `App (t1, t2) -> Names.union (!!free t1) (!!free t2) - - method private map ~f = function - #var as x -> x - | `Abs (s, t) as l -> - let t' = f t in - if t == t' then l else `Abs(s, t') - | `App (t1, t2) as l -> - let t'1 = f t1 and t'2 = f t2 in - if t'1 == t1 && t'2 == t2 then l else `App (t'1, t'2) - - method subst ~sub = function - #var as x -> var#subst ~sub x - | `Abs(s, t) as l -> - let used = !!free t in - let used_expr = - Subst.fold sub ~init:[] - ~f:(fun ~key ~data acc -> - if Names.mem s used then data::acc else acc) in - if List.exists used_expr ~f:(fun t -> Names.mem s (!!free t)) then - let name = s ^ string_of_int (next_id ()) in - `Abs(name, - !!subst ~sub:(Subst.add ~key:s ~data:(`Var name) sub) t) - else - self#map ~f:(!!subst ~sub:(Subst.remove s sub)) l - | `App _ as l -> - self#map ~f:(!!subst ~sub) l - - method eval l = - match self#map ~f:!!eval l with - `App(`Abs(s,t1), t2) -> - !!eval (!!subst ~sub:(Subst.add ~key:s ~data:t2 Subst.empty) t1) - | t -> t -end - -(* Operations specialized to lambda *) - -let lambda = lazy_fix lambda_ops - -(* The expr language of arithmetic expressions *) - -type 'a expr = - [ `Var of string | `Num of int | `Add of 'a * 'a - | `Neg of 'a | `Mult of 'a * 'a] - -let expr_ops (ops : ('a,'a) #ops Lazy.t) = - let free = lazy !!ops#free - and subst = lazy !!ops#subst - and eval = lazy !!ops#eval in - object (self : ([> 'a expr], 'a expr) #ops) - method free = function - #var as x -> var#free x - | `Num _ -> Names.empty - | `Add(x, y) -> Names.union (!!free x) (!!free y) - | `Neg x -> !!free x - | `Mult(x, y) -> Names.union (!!free x) (!!free y) - - method private map ~f = function - #var as x -> x - | `Num _ as x -> x - | `Add(x, y) as e -> - let x' = f x and y' = f y in - if x == x' && y == y' then e - else `Add(x', y') - | `Neg x as e -> - let x' = f x in - if x == x' then e else `Neg x' - | `Mult(x, y) as e -> - let x' = f x and y' = f y in - if x == x' && y == y' then e - else `Mult(x', y') - - method subst ~sub = function - #var as x -> var#subst ~sub x - | #expr as e -> self#map ~f:(!!subst ~sub) e - - method eval (#expr as e) = - match self#map ~f:!!eval e with - `Add(`Num m, `Num n) -> `Num (m+n) - | `Neg(`Num n) -> `Num (-n) - | `Mult(`Num m, `Num n) -> `Num (m*n) - | e -> e - end - -(* Specialized versions *) - -let expr = lazy_fix expr_ops - -(* The lexpr language, reunion of lambda and expr *) - -type 'a lexpr = [ 'a lambda | 'a expr ] - -let lexpr_ops (ops : ('a,'a) #ops Lazy.t) = - let lambda = lambda_ops ops in - let expr = expr_ops ops in - object (self : ([> 'a lexpr], 'a lexpr) #ops) - method free = function - #lambda as x -> lambda#free x - | #expr as x -> expr#free x - - method subst ~sub = function - #lambda as x -> lambda#subst ~sub x - | #expr as x -> expr#subst ~sub x - - method eval = function - #lambda as x -> lambda#eval x - | #expr as x -> expr#eval x -end - -let lexpr = lazy_fix lexpr_ops - -(* A few examples: -lambda#eval (`App(`Abs("x",`Var"x"), `Var"y"));; -expr#eval (`Add(`Mult(`Num 3,`Neg(`Num 2)), `Var"x"));; -lexpr#eval (`Add(`App(`Abs("x",`Mult(`Var"x",`Var"x")),`Num 2), `Num 5));; -*) diff --git a/testlabl/multimatch.ml b/testlabl/multimatch.ml deleted file mode 100644 index 4add221062..0000000000 --- a/testlabl/multimatch.ml +++ /dev/null @@ -1,157 +0,0 @@ -(* Simple example *) -let f x = - (multimatch x with `A -> 1 | `B -> true), - (multimatch x with `A -> 1. | `B -> "1");; - -(* OK *) -module M : sig - val f : - [< `A & 'a = int & 'b = float | `B & 'b =string & 'a = bool] -> 'a * 'b -end = struct let f = f end;; - -(* Bad *) -module M : sig - val f : - [< `A & 'a = int & 'b = float | `B & 'b =string & 'a = int] -> 'a * 'b -end = struct let f = f end;; - -(* Should be good! *) -module M : sig - val f : - [< `A & 'a = int * float | `B & 'a = bool * string] -> 'a -end = struct let f = f end;; - -let f = multifun `A|`B as x -> f x;; - -(* Two-level example *) -let f = multifun - `A -> (multifun `C -> 1 | `D -> 1.) - | `B -> (multifun `C -> true | `D -> "1");; - -(* OK *) -module M : sig - val f : - [< `A & 'b = [< `C & 'a = int | `D & 'a = float & 'c = bool] -> 'a - | `B & 'b = [< `C & 'c = bool | `D & 'c = string] -> 'c] -> 'b -end = struct let f = f end;; - -(* Bad *) -module M : sig - val f : - [< `A & 'b = [< `C & 'a = int | `D & 'a = bool] -> 'a - | `B & 'b = [< `C & 'c = bool | `D & 'c = string] -> 'c] -> 'b -end = struct let f = f end;; - -module M : sig - val f : - [< `A & 'b = [< `C & 'a = int | `D] -> 'a - | `B & 'b = [< `C & 'c = bool | `D & 'c = string] -> 'c] -> 'b -end = struct let f = f end;; - - -(* Examples with hidden sharing *) -let r = ref [] -let f = multifun `A -> 1 | `B -> true -let g x = r := [f x];; - -(* Bad! *) -module M : sig - val g : [< `A & 'a = int | `B & 'a = bool] -> unit -end = struct let g = g end;; - -let r = ref [] -let f = multifun `A -> r | `B -> ref [];; -(* Now OK *) -module M : sig - val f : [< `A & 'b = int list ref | `B & 'b = 'c list ref] -> 'b -end = struct let f = f end;; -(* Still OK *) -let l : int list ref = r;; -module M : sig - val f : [< `A & 'b = int list ref | `B & 'b = 'c list ref] -> 'b -end = struct let f = f end;; - - -(* Examples that would need unification *) -let f = multifun `A -> (1, []) | `B -> (true, []) -let g x = fst (f x);; -(* Didn't work, now Ok *) -module M : sig - val g : [< `A & 'a * 'b = int * bool | `B & 'a * 'b = bool * int] -> 'a -end = struct let g = g end;; -let g = multifun (`A|`B) as x -> g x;; - -(* Other examples *) - -let f x = - let a = multimatch x with `A -> 1 | `B -> "1" in - (multifun `A -> print_int | `B -> print_string) x a -;; - -let f = multifun (`A|`B) as x -> f x;; - -type unit_op = [`Set of int | `Move of int] -type int_op = [`Get] - -let op r = - multifun - `Get -> !r - | `Set x -> r := x - | `Move dx -> r := !r + dx -;; - -let rec trace r = function - [] -> [] - | op1 :: ops -> - multimatch op1 with - #int_op as op1 -> - let x = op r op1 in - x :: trace r ops - | #unit_op as op1 -> - op r op1; - trace r ops -;; - -class point x = object - val mutable x : int = x - method get = x - method set y = x <- y - method move dx = x <- x + dx -end;; - -let poly sort coeffs x = - let add, mul, zero = - multimatch sort with - `Int -> (+), ( * ), 0 - | `Float -> (+.), ( *. ), 0. - in - let rec compute = function - [] -> zero - | c :: cs -> add c (mul x (compute cs)) - in - compute coeffs -;; - -module M : sig - val poly : [< `Int & 'a = int | `Float & 'a = float] -> 'a list -> 'a -> 'a -end = struct let poly = poly end;; - -type ('a,'b) num_sort = - 'b constraint 'b = [< `Int & 'a = int | `Float & 'a = float] -module M : sig - val poly : ('a,_) num_sort -> 'a list -> 'a -> 'a -end = struct let poly = poly end;; - - -(* type dispatch *) - -let print0 = multifun - `Int -> print_int - | `Float -> print_float -;; -let print1 = multifun - #num as x -> print0 x - | `List t -> List.iter (print0 t) - | `Pair(t1,t2) -> (fun (x,y) -> print0 t1 x; print0 t2 y) -;; -print1 (`Pair(`Int,`Float)) (1,1.0);; diff --git a/testlabl/newlabels.ps b/testlabl/newlabels.ps deleted file mode 100644 index 01eac1945b..0000000000 --- a/testlabl/newlabels.ps +++ /dev/null @@ -1,1458 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvipsk 5.78 p1.4 Copyright 1996-98 ASCII Corp.(www-ptex@ascii.co.jp) -%%dvipsk 5.78 Copyright 1998 Radical Eye Software (www.radicaleye.com) -%%Title: newlabels.dvi -%%Pages: 2 0 -%%PageOrder: Ascend -%%BoundingBox: 0 0 596 842 -%%EndComments -%%BeginProcSet: PStoPS 1 15 -userdict begin -[/showpage/erasepage/copypage]{dup where{pop dup load - type/operatortype eq{1 array cvx dup 0 3 index cvx put - bind def}{pop}ifelse}{pop}ifelse}forall -[/letter/legal/executivepage/a4/a4small/b5/com10envelope - /monarchenvelope/c5envelope/dlenvelope/lettersmall/note - /folio/quarto/a5]{dup where{dup wcheck{exch{}put} - {pop{}def}ifelse}{pop}ifelse}forall -/setpagedevice {pop}bind 1 index where{dup wcheck{3 1 roll put} - {pop def}ifelse}{def}ifelse -/PStoPSmatrix matrix currentmatrix def -/PStoPSxform matrix def/PStoPSclip{clippath}def -/defaultmatrix{PStoPSmatrix exch PStoPSxform exch concatmatrix}bind def -/initmatrix{matrix defaultmatrix setmatrix}bind def -/initclip[{matrix currentmatrix PStoPSmatrix setmatrix - [{currentpoint}stopped{$error/newerror false put{newpath}} - {/newpath cvx 3 1 roll/moveto cvx 4 array astore cvx}ifelse] - {[/newpath cvx{/moveto cvx}{/lineto cvx} - {/curveto cvx}{/closepath cvx}pathforall]cvx exch pop} - stopped{$error/errorname get/invalidaccess eq{cleartomark - $error/newerror false put cvx exec}{stop}ifelse}if}bind aload pop - /initclip dup load dup type dup/operatortype eq{pop exch pop} - {dup/arraytype eq exch/packedarraytype eq or - {dup xcheck{exch pop aload pop}{pop cvx}ifelse} - {pop cvx}ifelse}ifelse - {newpath PStoPSclip clip newpath exec setmatrix} bind aload pop]cvx def -/initgraphics{initmatrix newpath initclip 1 setlinewidth - 0 setlinecap 0 setlinejoin []0 setdash 0 setgray - 10 setmiterlimit}bind def -end -%%EndProcSet -%DVIPSCommandLine: dvips -f newlabels -%DVIPSParameters: dpi=300 -%DVIPSSource: TeX output 1999.10.26:1616 -%%BeginProcSet: tex.pro -%! -/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N -/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 -mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} -ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale -isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div -hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul -TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} -forall round exch round exch]setmatrix}N /@landscape{/isls true N}B -/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B -/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ -/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N -string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N -end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ -/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] -N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup -length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ -128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub -get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data -dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N -/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup -/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx -0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff -setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff -.1 sub]{ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]} -if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup -length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ -cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin -0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul -add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict -/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook -known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X -/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn -put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N -/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley -X /rulex X V}B /V{}B /RV statusdict begin /product where{pop false[ -(Display)(NeXT)(LaserWriter 16/600)]{dup length product length le{dup -length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} -forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false -RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 -false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform -round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg -rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail -{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} -B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ -4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ -p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p -a}B /bos{/SS save N}B /eos{SS restore}B end - -%%EndProcSet -TeXDict begin 39158280 55380996 1000 300 300 (newlabels.dvi) -@start -%DVIPSBitmapFont: Fa cmr6 6 2 -/Fa 2 51 df<187898181818181818181818181818FF08107D8F0F> 49 -D<1F00618040C08060C0600060006000C00180030006000C00102020207FC0FFC00B107F -8F0F> I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmmi8 8 4 -/Fb 4 111 df<FFC0FF1C00181C00101C00101C00103800203800203800203800207000 -40700040700040700040E00080E00080E00080E00080E00100E00200E004006008003830 -000FC00018177E9618> 85 D<0300038003000000000000000000000000001C00240046 -0046008C000C0018001800180031003100320032001C0009177F960C> 105 -D<383C1E0044C6630047028100460301008E0703000C0603000C0603000C060300180C06 -00180C0620180C0C20180C0C40301804C0301807001B0E7F8D1F> 109 -D<383C0044C6004702004602008E06000C06000C06000C0600180C00180C401818401818 -80300980300E00120E7F8D15> I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmbx8 8 4 -/Fc 4 111 df<01800780FF80FF80078007800780078007800780078007800780078007 -800780078007800780FFF8FFF80D157D9414> 49 D<387C7C7C3800000000FCFC3C3C3C -3C3C3C3C3C3C3C3CFFFF08187F970B> 105 D<FC7E0FC0FD8730E03E07C0F03E07C0F03C -0780F03C0780F03C0780F03C0780F03C0780F03C0780F03C0780F03C0780F03C0780F0FF -1FE3FCFF1FE3FC1E0F7E8E23> 109 D<FC7C00FD8E003E0F003E0F003C0F003C0F003C0F -003C0F003C0F003C0F003C0F003C0F003C0F00FF3FC0FF3FC0120F7E8E17> I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmsy8 8 3 -/Fd 3 93 df<FFFFF0FFFFF014027D881B> 0 D<020002000200C218F2783AE00F800F80 -3AE0F278C2180200020002000D0E7E8E12> 3 D<03F8001FFF003C07806000C0C00060C0 -0060C00060C00060C00060C00060C00060C00060C00060C00060C00060C00060C00060C0 -006040002013137E9218> 92 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmtt12 12 43 -/Fe 43 125 df<01818003C3C003C3C003C3C003C3C003C3C003C3C07FFFF0FFFFF8FFFF -F87FFFF00787800787800787800F8F800F0F000F0F000F0F000F0F007FFFF0FFFFF8FFFF -F87FFFF01E1E001E1E001E1E001E1E001E1E001E1E000C0C00151E7E9D1A> 35 -D<00E00003F00007F8000738000E1C000E1C000E1C000E1C000E38000E39FC0E71FC07F1 -FC07E1C007C1C00781C00783800F83801FC3803DC70078E70070EE00E07E00E07E00E03C -08E03C1CE07E1C70FF1C7FE7F83FC3F80F00E0161E7F9D1A> 38 -D<0038007800F001E003C007800F000E001C001C0038003800700070007000E000E000E0 -00E000E000E000E000E000E000E000700070007000380038001C001C000E000F00078003 -C001E000F8007800380D2878A21A> 40 D<6000F00078003C001E000F000780038001C0 -01C000E000E0007000700070003800380038003800380038003800380038003800700070 -007000E000E001C001C0038007800F001E003C007800F00060000D287CA21A> I<7FFFC0 -FFFFE0FFFFE07FFFC013047D901A> 45 D<00C001C001C003C007C00FC07FC0FDC071C0 -01C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C0 -7FFF7FFF7FFF101E7B9D1A> 49 D<03F8000FFE001FFF803C07C07801E07000E0E00070 -F00070F000706000700000700000700000E00000E00001C00003C0000780000F00001E00 -003C0000780000F00003E00007C0000F00001E00703C00707FFFF0FFFFF07FFFF0141E7D -9D1A> I<03FC000FFF003FFFC03C03E07800E07800707800700000700000700000E00001 -E00007C003FF8003FF0003FFC00003E00000E0000070000078000038000038600038F000 -38F00078E000707000E07E03E03FFFC00FFF0001FC00151E7E9D1A> I<01FC0007FF001F -FFC01F07C03C01E07800F07000707000707000707800F03800E01E03C00FFF8003FE0007 -FF001F8FC03C01E07800F0700070E00038E00038E00038E00038F000787000707800F03E -03E01FFFC007FF0001FC00151E7E9D1A> 56 D<01F00007FC001FFE003E0F0038078070 -03807001C0E001C0E001C0E001E0E000E0E000E0E001E07001E07803E03C0FE01FFFE00F -FCE003F0E00001C00001C00001C0000380600380F00700F00F00F03E007FFC003FF0000F -C000131E7D9D1A> I<3078FCFC78300000000000000000003078FCFC7830061576941A> -I<183C7E7E3C18000000000000000000183C7E7E3E1E0E0E1C3CF8F060071C77941A> I< -0000C00003E00007E0000FC0003F80007E0000FC0003F80007E0000FC0003F80007E0000 -FC0000FC00007E00003F80000FC00007E00003F80000FC00007E00003F80000FC00007E0 -0003E00000C0131A7D9B1A> I<7FFFF0FFFFF8FFFFF87FFFF00000000000000000000000 -007FFFF0FFFFF8FFFFF87FFFF0150C7E941A> I<600000F80000FC00007E00003F80000F -C00007E00003F80000FC00007E00003F80000FC00007E00007E0000FC0003F80007E0000 -FC0003F80007E0000FC0003F80007E0000FC0000F80000600000131A7D9B1A> I<007C38 -01FF3807FFF80F83F81E00F81C0078380078380038700038700038700000E00000E00000 -E00000E00000E00000E00000E00000E000007000007000387000383800383800381C0070 -1E00F00F83E007FFC001FF80007C00151E7E9D1A> 67 D<FE03FEFF03FEFF03FE1D8070 -1D80701DC0701CC0701CC0701CE0701CE0701C60701C70701C70701C30701C38701C3870 -1C18701C1C701C1C701C0C701C0E701C0E701C06701C06701C07701C03701C0370FF81F0 -FF81F0FF80F0171E7F9D1A> 78 D<03F8E00FFEE01FFFE03C07E07801E0F001E0E000E0 -E000E0E000E0E000007000007800003F80001FF80007FF00007FC00007E00000F0000070 -000038000038600038E00038E00038E00070F000F0FE01E0FFFFC0EFFF80E1FE00151E7E -9D1A> 83 D<7FFFFEFFFFFEFFFFFEE0380EE0380EE0380EE0380E003800003800003800 -003800003800003800003800003800003800003800003800003800003800003800003800 -00380000380000380000380000380003FF8003FF8003FF80171E7F9D1A> I<FFFCFFFCFF -FCE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0 -00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFFCFFFCFF -FC0E2776A21A> 91 D<FFFCFFFCFFFC001C001C001C001C001C001C001C001C001C001C -001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C -001C001C001C001C001CFFFCFFFCFFFC0E277FA21A> 93 D<1FF0003FFC007FFE00780F -00300700000380000380007F8007FF801FFF803F8380780380700380E00380E00380E003 -80700780780F803FFFFC1FFDFC07F0FC16157D941A> 97 D<7E0000FE00007E00000E00 -000E00000E00000E00000E00000E00000E3E000EFF800FFFE00FC1F00F80700F00380E00 -380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80F00FC1E00FFF -C00EFF80063E00161E7F9D1A> I<00FF8003FFC00FFFE01F01E03C00C078000070000070 -0000E00000E00000E00000E00000E000007000007000007800703C00701F01F00FFFE003 -FFC000FE0014157D941A> I<000FC0001FC0000FC00001C00001C00001C00001C00001C0 -0001C001F1C007FDC00FFFC01E0FC03C07C07803C07001C0E001C0E001C0E001C0E001C0 -E001C0E001C0E001C07003C07003C03807C03E0FC01FFFF807FDFC01F1F8161E7E9D1A> -I<01F80007FF000FFF801E07C03C01C07800E07000E0E00070E00070FFFFF0FFFFF0FFFF -F0E000007000007000007800703C00701F01F00FFFE003FF8000FE0014157D941A> I<00 -07E0001FF0003FF800787800F03000E00000E00000E00000E0007FFFF0FFFFF0FFFFF000 -E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000 -E00000E00000E0003FFF807FFFC03FFF80151E7F9D1A> I<7E0000FE00007E00000E0000 -0E00000E00000E00000E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E0 -0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC3FC -FFE7FE7FC3FC171E7F9D1A> 104 D<00C00001E00001E00000C000000000000000000000 -0000000000000000007FE0007FE0007FE00000E00000E00000E00000E00000E00000E000 -00E00000E00000E00000E00000E00000E00000E00000E00000E0007FFF80FFFFC07FFF80 -121F7C9E1A> I<7FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E0 -0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0 -0000E00000E00000E00000E00000E0007FFFC0FFFFE07FFFC0131E7D9D1A> 108 -D<7CE0E000FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C -001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C -007F1F1F00FFBFBF807F1F1F00191580941A> I<7E3E00FEFF807FFFC00FC1C00F80E00F -00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E -00E07FC3FCFFE7FE7FC3FC17157F941A> I<01F00007FC001FFF003E0F803C07807803C0 -7001C0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C07803E0F80 -1FFF0007FC0001F00013157D941A> I<7E3E00FEFF807FFFE00FC1F00F80700F00380E00 -380E001C0E001C0E001C0E001C0E001C0E001C0E001C0F00380F00780F80F00FC1E00FFF -C00EFF800E3E000E00000E00000E00000E00000E00000E00000E00000E00007FC000FFE0 -007FC00016207F941A> I<7F81F8FF8FFC7F9FFE03FE1E03F80C03E00003E00003C00003 -80000380000380000380000380000380000380000380000380000380007FFF00FFFF007F -FF0017157F941A> 114 D<07FB801FFF807FFF80780780E00380E00380E003807800007F -C0001FFC0007FE00003F800007806001C0E001C0E001C0F003C0FC0780FFFF00EFFE00E3 -F80012157C941A> I<0180000380000380000380000380000380000380007FFFE0FFFFE0 -FFFFE0038000038000038000038000038000038000038000038000038000038000038070 -03807003807003807001C1E001FFE000FF80003F00141C7F9B1A> I<7E07E0FE0FE07E07 -E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00 -E00E00E00E01E00F03E007FFFC03FFFE00FCFC17157F941A> I<7F83FCFFC7FE7F83FC0E -00E00E00E00E00E00701C00701C00701C003838003838003838001C70001C70001C70000 -EE0000EE0000EE00007C00007C0000380017157F941A> I<FF83FEFF83FEFF83FE380038 -3800381C00701C00701C00701C38701C7C701C7C700C6C600EEEE00EEEE00EEEE00EEEE0 -0EC6E006C6C007C7C00783C00783C017157F941A> I<7FC7F87FCFFC7FC7F80703C00383 -8003C70001EF0000FE00007C00007800003800007C0000EE0001EE0001C7000383800783 -C00F01C07FC7FCFFC7FE7FC7FC17157F941A> I<7F83FCFFC7FE7F83FC0E00E00E00E007 -00E00701C00701C00381C003838003C38001C38001C70000E70000E70000E60000660000 -6E00003C00003C00003C0000380000380000380000700000700030F00078E00071E0007F -C0003F80001E000017207F941A> I<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 -F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F060042775A21A> 124 D -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmr8 8 3 -/Ff 3 51 df<003000003000003000003000003000003000003000003000003000003000 -003000FFFFFCFFFFFC003000003000003000003000003000003000003000003000003000 -00300000300016187E931B> 43 D<06000E00FE000E000E000E000E000E000E000E000E -000E000E000E000E000E000E000E000E000E00FFE00B157D9412> 49 -D<0F8030E040708030C038E0384038003800700070006000C00180030006000C08080810 -183FF07FF0FFF00D157E9412> I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmmi12 12 13 -/Fg 13 121 df<0FFFF81FFFFC3FFFF870200040200080200080600000600000600000C0 -0000C00000C00000C00001C0000180000180000380000380000380000700000300001615 -7E9415> 28 D<0000100000002000000020000000200000002000000040000000400000 -004000000040000000800000008000000080000000800000010000000FE00000711C0001 -C10600030203000E0203801C020180180201C0380401C0700401C0700401C0700401C0E0 -080380E0080380E00807006008070070100E0030101C00301038001C10E0000623800001 -FE0000002000000020000000400000004000000040000000400000008000000080000000 -800000008000001A2D7EA21D> 30 D<70F8F8F87005057C840E> 58 -D<70F8FCFC7404040404080810102040060F7C840E> I<00008000018000018000030000 -0300000300000600000600000600000C00000C00000C0000180000180000180000300000 -300000300000600000600000600000C00000C00000C00001800001800001800001800003 -00000300000300000600000600000600000C00000C00000C000018000018000018000030 -0000300000300000600000600000600000C00000C00000C0000011317DA418> 61 -D<00FFFC00000F8000000F0000000F0000001E0000001E0000001E0000001E0000003C00 -00003C0000003C0000003C00000078000000780000007800000078000000F0000000F000 -0000F0000000F0000001E0000001E0000001E0002001E0002003C0004003C0004003C000 -8003C0008007800180078001000780030007800F000F803E00FFFFFE001B227DA121> 76 -D<1FFFFFFE1E01E00E1801E0063001E0062003C0062003C0064003C0044003C004400780 -04800780048007800400078000000F0000000F0000000F0000000F0000001E0000001E00 -00001E0000001E0000003C0000003C0000003C0000003C00000078000000780000007800 -000078000000F0000000F0000000F0000000F0000001F000007FFFC0001F227EA11D> 84 -D<3FFE01FF8003C0003C0003C000300003C0001000078000200007800020000780002000 -07800020000F000040000F000040000F000040000F000040001E000080001E000080001E -000080001E000080003C000100003C000100003C000100003C0001000078000200007800 -020000780002000078000200007000040000F000040000F0000800007000080000700010 -00007000200000380040000038008000001C01000000060600000001F800000021237DA1 -21> I<007E000381000700800E00801C0080380080780100700600FFF800F00000F00000 -E00000E00000E00000E00000E00080E000807003003004001838000FC00011157D9417> -101 D<01E00FC001C001C001C0038003800380038007000700070007000E000E000E000E -001C001C001C001C0038003800380038007000700070007080E100E100E100620062003C -000B237EA20F> 108 D<03C0F004631C04740E08780E08700708700708700F00E00F00E0 -0F00E00F00E00F01C01E01C01E01C01E01C03C03803803803803C07003C0E0072180071E -000700000700000E00000E00000E00000E00001C00001C00001C0000FF8000181F819418 -> 112 D<3C0F004630C04741C08783C08783C08701808700000E00000E00000E00000E00 -001C00001C00001C00001C000038000038000038000038000070000030000012157E9416 -> 114 D<01E0F006310C081A1C101A3C201C3C201C18201C000038000038000038000038 -0000700000700000700000700860E010F0E010F0E020E170404230803C1F0016157E941C -> 120 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmti12 12 22 -/Fh 22 122 df<FFF0FFF0FFE00C037C8B11> 45 D<70F8F8F0E005057A840F> I<00F8 -C00185C00705C00E03800E03801C03803C0380380700780700780700780700F00E00F00E -00F00E00F00E10F01C20701C20703C20305C40308C400F078014157B9419> 97 -D<03C01F8003800380038007000700070007000E000E000E000E001C001CF81D0C1E0E3C -0638073807380F700F700F700F700FE01EE01EE01EE03CE038E038607060E031C01F0010 -237BA216> I<007E0001C1000301800703800E07801C07803C0000380000780000780000 -780000F00000F00000F00000F00000F00100700100700200300C001830000FC00011157B -9416> I<00003C0003F80000380000380000380000700000700000700000700000E00000 -E00000E00000E00001C000F9C00185C00705C00E03800E03801C03803C03803807007807 -00780700780700F00E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F07 -8016237BA219> I<00F803840E021C023C0238027804F018FFE0F000F000E000E000E000 -E000E002E0026004701830600F800F157A9416> I<00003E0000470000CF00018F000186 -000380000380000380000700000700000700000700000700000E0000FFF0000E00000E00 -000E00001C00001C00001C00001C00001C00003800003800003800003800003800007000 -00700000700000700000700000E00000E00000E00000E00000C00001C00001C000718000 -F18000F300006200003C0000182D82A20F> I<001F180030B800E0B801C07001C0700380 -700780700700E00F00E00F00E00F00E01E01C01E01C01E01C01E01C01E03800E03800E07 -80060B8006170001E700000700000700000E00000E00000E00701C00F01800F0300060E0 -003F8000151F7E9416> I<00C001E001C001C0000000000000000000000000000000001E -002300430043008700870087000E000E001C001C001C0038003800384070807080708071 -0032001C000B217BA00F> 105 D<00F00007E00000E00000E00000E00001C00001C00001 -C00001C0000380000380000380000380000700000701E00702100704700E08F00E10F00E -20600E40001D80001E00001FC0001C7000383800383800381C00381C2070384070384070 -3840701880E01880600F0014237DA216> 107 D<01E00FC001C001C001C0038003800380 -038007000700070007000E000E000E000E001C001C001C001C0038003800380038007000 -700070007100E200E200E200E200640038000B237CA20C> I<1C0F80F8002610C10C0047 -6066060087807807008780780700870070070087007007000E00E00E000E00E00E000E00 -E00E000E00E00E001C01C01C001C01C01C001C01C01C001C01C038203803803840380380 -70403803807080380380308070070031003003001E0023157B9428> I<380F804C30C04E -40608E80708F00708E00708E00701C00E01C00E01C00E01C00E03801C03801C03801C038 -0384700388700308700708700310E003106001E016157B941B> I<007E0001C300038180 -0701C00E01C01C01E03C01E03801E07801E07801E07801E0F003C0F003C0F00380F00780 -700700700E00700C0030180018700007C00013157B9419> I<01C1F002621804741C0878 -0C08700E08700E08701E00E01E00E01E00E01E00E01E01C03C01C03C01C03C01C0780380 -7003807003C0E003C1C0072380071E000700000700000E00000E00000E00000E00001C00 -001C00001C0000FFC000171F7F9419> I<1C1F002620804741C08783C08703C087018087 -00000E00000E00000E00000E00001C00001C00001C00001C000038000038000038000038 -000070000030000012157B9415> 114 D<00FC000183000200800401800C03800C03000C -00000F00000FF00007FC0003FE00003E00000F00000700700700F00600F00600E0040040 -08002030001FC00011157D9414> I<00C001C001C001C001C003800380038003800700FF -F8070007000E000E000E000E001C001C001C001C00380038003800381070207020704070 -8031001E000D1F7C9E10> I<1E0060E02300E0F04380E1F04381C0F08381C0708701C030 -8701C030070380200E0380200E0380200E0380201C0700401C0700401C0700401C070080 -1C0700801C0701001C0F01000C0B02000613840003E0F8001C157B9420> 119 -D<03C1E0046210083470103CF02038F020386020380000700000700000700000700000E0 -0000E00000E00000E02061C040F1C040F1C080E2C100446200383C0014157D9416> I<1E -00302300704380704380E08380E08700E08700E00701C00E01C00E01C00E01C01C03801C -03801C03801C03801C07001C07001C07001C0F000C3E0003CE00000E00000E00001C0060 -1C00F03800F03000E0600080C0004380003E0000141F7B9418> I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmbx12 12 20 -/Fi 20 122 df<FFFFFF8000FFFFFFF00007F003FC0007F0007E0007F0003F0007F0001F -8007F0000FC007F00007E007F00007E007F00007F007F00003F007F00003F007F00003F0 -07F00003F807F00003F807F00003F807F00003F807F00003F807F00003F807F00003F807 -F00003F807F00003F807F00003F007F00003F007F00003F007F00007E007F00007E007F0 -000FC007F0001F8007F0003F0007F0007E0007F003FC00FFFFFFF000FFFFFF800025227E -A12B> 68 D<01FE0207FF861F01FE3C007E7C001E78000E78000EF80006F80006FC0006 -FC0000FF0000FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FE00007F -00003F00003FC0001FC0001FC0001FE0001EE0001EF0003CFC003CFF00F8C7FFE080FF80 -18227DA11F> 83 D<7FFFFFFF807FFFFFFF807E03F80F807803F807807003F803806003 -F80180E003F801C0E003F801C0C003F800C0C003F800C0C003F800C0C003F800C00003F8 -00000003F800000003F800000003F800000003F800000003F800000003F800000003F800 -000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 -0003F800000003F800000003F800000003F800000003F8000001FFFFF00001FFFFF00022 -227EA127> I<0FFC003FFF807E07C07E03E07E01E07E01F03C01F00001F00001F0003FF0 -03FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F -18167E951B> 97 D<FF000000FF0000001F0000001F0000001F0000001F0000001F0000 -001F0000001F0000001F0000001F0000001F0000001F0000001F0FE0001F3FF8001FE07C -001F803E001F001F001F000F801F000F801F000FC01F000FC01F000FC01F000FC01F000F -C01F000FC01F000FC01F000FC01F000F801F001F801F801F001FC03E001EE07C001C3FF8 -00180FC0001A237EA21F> I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000 -FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00181F00300FC060 -07FFC000FF0015167E9519> I<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC00 -F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F00300FC0 -7003FFC000FF0015167E951A> 101 D<001FC0007FE000F1F001E3F003E3F007C3F007C1 -E007C00007C00007C00007C00007C00007C000FFFE00FFFE0007C00007C00007C00007C0 -0007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0 -0007C00007C0003FFC003FFC00142380A211> I<01FE0F0007FFBF800F87C7801F03E780 -1E01E0003E01F0003E01F0003E01F0003E01F0003E01F0001E01E0001F03E0000F87C000 -0FFF800009FE000018000000180000001C0000001FFFE0000FFFF80007FFFE001FFFFF00 -3C003F0078000F80F0000780F0000780F0000780F000078078000F003C001E001F007C00 -0FFFF80001FFC00019217F951C> I<1C003E007F007F007F003E001C0000000000000000 -00000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F -001F001F001F001F001F00FFE0FFE00B247EA310> 105 D<FF00FF001F001F001F001F00 -1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00 -1F001F001F001F001F001F001F001F001F00FFE0FFE00B237EA210> 108 -D<FF07F007F000FF1FFC1FFC001F303E303E001F403E403E001F801F801F001F801F801F -001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F -001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F -001F001F001F001F001F001F00FFE0FFE0FFE0FFE0FFE0FFE02B167E9530> I<FF07E000 -FF1FF8001F307C001F403C001F803E001F803E001F003E001F003E001F003E001F003E00 -1F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00 -1F003E00FFE1FFC0FFE1FFC01A167E951F> I<00FE0007FFC00F83E01E00F03E00F87C00 -7C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00 -F81F01F00F83E007FFC000FE0017167E951C> I<FF0FE000FF3FF8001FE07C001F803E00 -1F001F001F001F801F001F801F000FC01F000FC01F000FC01F000FC01F000FC01F000FC0 -1F000FC01F000FC01F001F801F001F801F803F001FC03E001FE0FC001F3FF8001F0FC000 -1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000FFE00000 -FFE000001A207E951F> I<0FF3003FFF00781F00600700E00300E00300F00300FC00007F -E0007FF8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F00700FC0E00EF -FC00C7F00011167E9516> 115 D<01800001800001800001800003800003800007800007 -80000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F80000F80000F -80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C30003FE0000 -F80011207F9F16> I<FF01FE00FF01FE001F003E001F003E001F003E001F003E001F003E -001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E -001F003E001F007E001F00FE000F81BE0007FF3FC001FC3FC01A167E951F> I<FFE07FC0 -FFE07FC00F801C0007C0380003E0700003F0600001F8C00000F98000007F8000003F0000 -001F0000001F8000003FC0000037C0000063E00000C1F00001C0F8000380FC0007007E00 -0E003E00FF80FFE0FF80FFE01B167F951E> 120 D<FFE01FE0FFE01FE01F8007000F8006 -000FC00E0007C00C0007E00C0003E0180003E0180001F0300001F0300000F8600000F860 -00007CC000007CC000007FC000003F8000003F8000001F0000001F0000000E0000000E00 -00000C0000000C00000018000078180000FC380000FC300000FC60000069C000007F8000 -001F0000001B207F951E> I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmsy10 12 15 -/Fj 15 107 df<FFFFFFFCFFFFFFFC1E027C8C27> 0 D<03F0000FFC001FFE003FFF007F -FF807FFF80FFFFC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC07FFF807FFF803F -FF001FFE000FFC0003F00012147D9519> 15 D<000FFFFC007FFFFC01F0000003800000 -060000000C0000001800000030000000300000006000000060000000C0000000C0000000 -C0000000C0000000C0000000C0000000C0000000C0000000600000006000000030000000 -30000000180000000C000000060000000380000001E00000007FFFFC001FFFFC1E1E7C9A -27> 26 D<00000001800000000001800000000001800000000001800000000000C00000 -000000C000000000006000000000003000000000003000000000001C00000000000E0000 -0000000700FFFFFFFFFFE0FFFFFFFFFFE0000000000700000000000E00000000001C0000 -000000300000000000300000000000600000000000C00000000000C00000000001800000 -00000180000000000180000000000180002B1A7D9832> 33 D<001FFF007FFF01E00003 -80000600000C0000180000300000300000600000600000600000C00000C00000FFFFFFFF -FFFFC00000C000006000006000006000003000003000001800000C000006000003800001 -E000007FFF001FFF181E7C9A21> 50 D<00000300000300000600000600000C00000C00 -00180000180000300000300000600000600000C00000C00000C000018000018000030000 -0300000600000600000C00000C0000180000180000300000300000600000600000C00000 -C0000180000180000300000300000300000600000600000C00000C000018000018000030 -0000300000600000600000C00000400000183079A300> 54 D<C0C0C0C0C0C0C0C0E0E0 -C0C0C0C0C0C0C0C003127D9400> I<00008000018001F980070F000C0300180380180780 -3006C03006C0700CE0600C60600C60600C60E01870E01870E01870E03070E03070E03070 -E06070E06070E06070E06070E0C070E0C070E0C070E18070E180706180606300607300E0 -7300E03300C03600C01E01801E01800C03000F0E000DF800180000180000180000142A7E -A519> 59 D<000100000003000000030000000300000003000000030000000300000003 -000000030000000300000003000000030000000300000003000000030000000300000003 -000000030000000300000003000000030000000300000003000000030000000300000003 -000000030000000300000003000000030000FFFFFFFEFFFFFFFE1F207C9F27> 63 -D<40000040C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000 -C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000 -C0C00000C0C00000C0C00000C0C00000C0C00000C0600001806000018030000300180006 -000E001C000780780001FFE000007F80001A1F7D9D21> 91 D<007F800001FFE0000780 -78000E001C0018000600300003006000018060000180C00000C0C00000C0C00000C0C000 -00C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C000 -00C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C00000C0C000 -00C0400000401A1F7D9D21> I<000C0000000C0000001E0000001E0000001E0000003300 -0000330000006180000061800000C0C00000C0C00000C0C0000180600001806000030030 -00030030000300300006001800060018000C000C000C000C000C000C0018000600180006 -003000030030000300600001806000018060000180C00000C0C00000401A1F7D9D21> 94 -D<0003C0001E0000380000700000E00000E00000E00000E00000E00000E00000E00000E0 -0000E00000E00000E00000E00000E00000E00000E00000E00000E00001C0000380000F00 -00F800000F000003800001C00000E00000E00000E00000E00000E00000E00000E00000E0 -0000E00000E00000E00000E00000E00000E00000E00000E00000E000007000003800001E -000003C012317DA419> 102 D<F800000F000003800001C00000E00000E00000E00000E0 -0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0 -0000E000007000003800001E000003C0001E0000380000700000E00000E00000E00000E0 -0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0 -0000E00001C0000380000F0000F8000012317DA419> I<C0C0C0C0C0C0C0C0C0C0C0C0C0 -C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 -02317AA40E> 106 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmr12 12 65 -/Fk 65 125 df<001FC1F00070371800C03E3C01807C3C0380783C070038000700380007 -003800070038000700380007003800070038000700380007003800FFFFFFC00700380007 -003800070038000700380007003800070038000700380007003800070038000700380007 -0038000700380007003800070038000700380007003800070038000700380007003C007F -E1FFC01E2380A21C> 11 D<001FC0000070200000C01000018038000380780007007800 -0700300007000000070000000700000007000000070000000700000007000000FFFFF800 -070078000700380007003800070038000700380007003800070038000700380007003800 -070038000700380007003800070038000700380007003800070038000700380007003800 -070038007FE1FF80192380A21B> I<001FD8000070380000C07800018078000380780007 -0038000700380007003800070038000700380007003800070038000700380007003800FF -FFF800070038000700380007003800070038000700380007003800070038000700380007 -003800070038000700380007003800070038000700380007003800070038000700380007 -003800070038007FF3FF80192380A21B> I<000FC07F00007031C08000E00B004001801E -00E003803E01E007003C01E007001C00C007001C000007001C000007001C000007001C00 -0007001C000007001C000007001C0000FFFFFFFFE007001C01E007001C00E007001C00E0 -07001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007 -001C00E007001C00E007001C00E007001C00E007001C00E007001C00E007001C00E00700 -1C00E007001C00E07FF1FFCFFE272380A229> I<70F8FCFC740404040408081010204006 -0F7CA20E> 39 D<00200040008001000300060004000C000C0018001800300030003000 -7000600060006000E000E000E000E000E000E000E000E000E000E000E000E000E000E000 -6000600060007000300030003000180018000C000C000400060003000100008000400020 -0B327CA413> I<800040002000100018000C000400060006000300030001800180018001 -C000C000C000C000E000E000E000E000E000E000E000E000E000E000E000E000E000E000 -C000C000C001C0018001800180030003000600060004000C00180010002000400080000B -327DA413> I<70F8FCFC7404040404080810102040060F7C840E> 44 -D<FFF8FFF80D02808B10> I<70F8F8F87005057C840E> I<01F000071C000C0600180300 -3803803803807001C07001C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001E0 -F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E07001C07001C07001C07803C0 -3803803803801C07000C0600071C0001F00013227EA018> 48 D<008003800F80F38003 -800380038003800380038003800380038003800380038003800380038003800380038003 -800380038003800380038003800380038007C0FFFE0F217CA018> I<03F0000C1C001007 -002007804003C04003C08003E0F003E0F801E0F801E0F801E02003E00003E00003C00003 -C0000780000700000E00001C0000180000300000600000C0000180000100000200200400 -200800201800603000403FFFC07FFFC0FFFFC013217EA018> I<03F8000C1E00100F0020 -07804007C07807C07803C07807C03807C0000780000780000700000F00000C0000380003 -F000001C00000F000007800007800003C00003C00003E02003E07003E0F803E0F803E0F0 -03C04003C0400780200780100F000C1C0003F00013227EA018> I<000300000300000700 -000700000F00001700001700002700006700004700008700018700010700020700060700 -040700080700080700100700200700200700400700C00700FFFFF8000700000700000700 -000700000700000700000700000F80007FF015217FA018> I<70F8F8F870000000000000 -000000000070F8F8F87005157C940E> 58 D<FFFFFFFEFFFFFFFE000000000000000000 -0000000000000000000000000000000000000000000000FFFFFFFEFFFFFFFE1F0C7D9126 -> 61 D<07E01838201C400E800FF00FF00FF00F000F000E001C00380030006000C000C0 -00800080018001000100010001000100010000000000000000000000038007C007C007C0 -038010237DA217> 63 D<0001800000018000000180000003C0000003C0000003C00000 -05E0000005E0000009F0000008F0000008F00000107800001078000010780000203C0000 -203C0000203C0000401E0000401E0000C01F0000800F0000800F0001FFFF800100078001 -000780020003C0020003C0020003C0040001E0040001E0040001E0080000F01C0000F03E -0001F8FF800FFF20237EA225> 65 D<FFFFF8000F800E0007800780078003C0078003E0 -078001E0078001F0078001F0078001F0078001F0078001F0078001E0078003E0078007C0 -07800F8007803E0007FFFE0007800780078003C0078001E0078001F0078000F0078000F8 -078000F8078000F8078000F8078000F8078000F8078001F0078001F0078003E0078007C0 -0F800F00FFFFFC001D227EA123> I<0007E0100038183000E0063001C00170038000F007 -0000F00E0000701E0000701C0000303C0000303C0000307C0000107800001078000010F8 -000000F8000000F8000000F8000000F8000000F8000000F8000000F80000007800000078 -0000107C0000103C0000103C0000101C0000201E0000200E000040070000400380008001 -C0010000E0020000381C000007E0001C247DA223> I<FFFFF0000F801E00078007000780 -0380078001C0078000E0078000F007800078078000780780007C0780003C0780003C0780 -003C0780003E0780003E0780003E0780003E0780003E0780003E0780003E0780003E0780 -003E0780003C0780003C0780007C0780007807800078078000F0078000E0078001E00780 -03C0078007000F801E00FFFFF0001F227EA125> I<FFFFFFC00F8007C0078001C0078000 -C00780004007800040078000600780002007800020078000200780202007802000078020 -0007802000078060000780E00007FFE0000780E000078060000780200007802000078020 -000780200007800000078000000780000007800000078000000780000007800000078000 -00078000000FC00000FFFE00001B227EA120> 70 D<0007F008003C0C1800E0021801C0 -01B8038000F8070000780F0000381E0000381E0000183C0000183C0000187C0000087800 -000878000008F8000000F8000000F8000000F8000000F8000000F8000000F8000000F800 -1FFF780000F8780000787C0000783C0000783C0000781E0000781E0000780F0000780700 -0078038000B801C000B800E00318003C0C080007F00020247DA226> I<FFFC3FFF0FC003 -F0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001 -E0078001E0078001E0078001E0078001E0078001E007FFFFE0078001E0078001E0078001 -E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001E0078001 -E0078001E0078001E0078001E00FC003F0FFFC3FFF20227EA125> I<FFFC0FC007800780 -078007800780078007800780078007800780078007800780078007800780078007800780 -07800780078007800780078007800780078007800FC0FFFC0E227EA112> I<FFFC00FF80 -0FC0007C0007800030000780002000078000400007800080000780010000078002000007 -80040000078008000007801000000780200000078040000007808000000781C000000783 -E000000785E000000788F000000790F0000007A078000007C03C000007803C000007801E -000007800F000007800F00000780078000078007C000078003C000078001E000078001E0 -00078000F000078000F8000FC000FC00FFFC07FF8021227EA126> 75 -D<FFFC001F80000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00 -000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00010F00 -010F00010F00010F00030F00030F00020F00060F00060F001E1F007EFFFFFE18227DA11E -> I<FF8007FF07C000F807C0007005E0002004F0002004F0002004780020047C0020043C -0020041E0020041F0020040F002004078020040780200403C0200401E0200401E0200400 -F0200400F8200400782004003C2004003E2004001E2004000F2004000F20040007A00400 -03E0040003E0040001E0040001E0040000E00E0000601F000060FFE0002020227EA125> -78 D<000FE00000783C0000E00E0003C00780078003C00F0001E00E0000E01E0000F03C -0000783C0000787C00007C7C00007C7800003C7800003CF800003EF800003EF800003EF8 -00003EF800003EF800003EF800003EF800003EF800003E7800003C7C00007C7C00007C3C -0000783E0000F81E0000F00F0001E00F0001E0078003C003C0078000E00E0000783C0000 -0FE0001F247DA226> I<FFFFF0000F803C0007800F0007800780078007C0078003C00780 -03E0078003E0078003E0078003E0078003E0078003E0078003C0078007C0078007800780 -0F0007803C0007FFF0000780000007800000078000000780000007800000078000000780 -0000078000000780000007800000078000000780000007800000078000000FC00000FFFC -00001B227EA121> I<FFFFE000000F803C000007800E00000780078000078007C0000780 -03C000078003E000078003E000078003E000078003E000078003E000078003C000078007 -C000078007800007800E000007803C000007FFE000000780700000078038000007801C00 -0007801E000007800E000007800F000007800F000007800F000007800F000007800F8000 -07800F800007800F800007800F808007800FC080078007C0800FC003C100FFFC01E20000 -00007C0021237EA124> 82 D<03F0200C0C601802603001E07000E0600060E00060E000 -60E00020E00020E00020F00000F000007800007F00003FF0001FFE000FFF0003FF80003F -C00007E00001E00000F00000F0000070800070800070800070800070C00060C00060E000 -C0F000C0C80180C6070081FC0014247DA21B> I<7FFFFFF8780780786007801840078008 -4007800840078008C007800C800780048007800480078004800780040007800000078000 -000780000007800000078000000780000007800000078000000780000007800000078000 -000780000007800000078000000780000007800000078000000780000007800000078000 -00078000000FC00001FFFE001E227EA123> I<FFF0007FC01F80001F000F00000C000F80 -000C000780000800078000080003C000100003C000100003C000100001E000200001E000 -200001F000600000F000400000F000400000780080000078008000007C008000003C0100 -00003C010000001E020000001E020000001E020000000F040000000F040000000F8C0000 -000788000000078800000003D000000003D000000003F000000001E000000001E0000000 -00C000000000C000000000C0000022237FA125> 86 D<FFF03FFC03FE1F8007E000F80F -0003C000700F0003C000200F0001E00020078001E00040078001E00040078003F0004003 -C002F0008003C002F0008003C002F0008003E00478018001E00478010001E00478010001 -E0083C010000F0083C020000F0083C020000F0101E02000078101E04000078101E040000 -78200F0400003C200F0800003C200F0800003C600F8800001E40079000001E4007900000 -1E4007D000001F8003F000000F8003E000000F8003E000000F0001E00000070001C00000 -070001C00000060000C0000002000080002F237FA132> I<FEFEC0C0C0C0C0C0C0C0C0C0 -C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FE -FE07317BA40E> 91 D<FEFE060606060606060606060606060606060606060606060606 -060606060606060606060606060606060606060606FEFE07317FA40E> 93 -D<1FE000303800780C00780E0030070000070000070000070000FF0007C7001E07003C07 -00780700700700F00708F00708F00708F00F087817083C23900FC1E015157E9418> 97 -D<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 -000E00000E00000E1F000E61C00E80600F00300E00380E003C0E001C0E001E0E001E0E00 -1E0E001E0E001E0E001E0E001E0E001C0E003C0E00380F00700C80600C41C0083F001723 -7FA21B> I<01FE000703000C07801C0780380300780000700000F00000F00000F00000F0 -0000F00000F00000F000007000007800403800401C00800C010007060001F80012157E94 -16> I<0000E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E0 -0000E00000E00000E001F8E00704E00C02E01C01E03800E07800E07000E0F000E0F000E0 -F000E0F000E0F000E0F000E0F000E07000E07800E03800E01801E00C02E0070CF001F0FE -17237EA21B> I<01FC000707000C03801C01C03801C07801E07000E0F000E0FFFFE0F000 -00F00000F00000F00000F000007000007800203800201C00400E008007030000FC001315 -7F9416> I<003E0000E30001C78003878003078007000007000007000007000007000007 -0000070000070000070000FFF80007000007000007000007000007000007000007000007 -00000700000700000700000700000700000700000700000700000700000700000780007F -F000112380A20F> I<00007003F1980E1E181C0E18380700380700780780780780780780 -7807803807003807001C0E001E1C0033F0002000002000003000003800003FFE001FFFC0 -0FFFE03000F0600030C00018C00018C00018C000186000306000303800E00E038003FE00 -15217F9518> I<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00 -000E00000E00000E00000E00000E1F800E60C00E80E00F00700F00700E00700E00700E00 -700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00 -70FFE7FF18237FA21B> I<1C003E003E003E001C00000000000000000000000000000000 -000E007E001E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E -000E000E00FFC00A227FA10E> I<00E001F001F001F000E0000000000000000000000000 -00000000007007F000F00070007000700070007000700070007000700070007000700070 -00700070007000700070007000700070007000706070F0E0F0C061803F000C2C83A10F> -I<0E0000FE00001E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 -000E00000E00000E03FC0E01F00E01C00E01800E02000E04000E08000E10000E38000EF8 -000F1C000E1E000E0E000E07000E07800E03C00E01C00E01E00E00F00E00F8FFE3FE1723 -7FA21A> I<0E00FE001E000E000E000E000E000E000E000E000E000E000E000E000E000E -000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E -00FFE00B237FA20E> I<0E1FC07F00FE60E183801E807201C00F003C00E00F003C00E00E -003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E00 -3800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E0038 -00E0FFE3FF8FFE27157F942A> I<0E1F80FE60C01E80E00F00700F00700E00700E00700E -00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E -0070FFE7FF18157F941B> I<01FC000707000C01801800C03800E0700070700070F00078 -F00078F00078F00078F00078F00078F000787000707800F03800E01C01C00E0380070700 -01FC0015157F9418> I<0E1F00FE61C00E80600F00700E00380E003C0E003C0E001E0E00 -1E0E001E0E001E0E001E0E001E0E001E0E003C0E003C0E00380F00700E80E00E41C00E3F -000E00000E00000E00000E00000E00000E00000E00000E00000E0000FFE000171F7F941B -> I<01F8200704600E02601C01603801E07800E07800E0F000E0F000E0F000E0F000E0F0 -00E0F000E0F000E07800E07800E03801E01C01E00C02E0070CE001F0E00000E00000E000 -00E00000E00000E00000E00000E00000E00000E0000FFE171F7E941A> I<0E3CFE461E8F -0F0F0F060F000E000E000E000E000E000E000E000E000E000E000E000E000E000F00FFF0 -10157F9413> I<0F8830786018C018C008C008E008F0007F003FE00FF001F8003C801C80 -0C800CC00CC008E018D0308FC00E157E9413> I<02000200020002000600060006000E00 -1E003E00FFFC0E000E000E000E000E000E000E000E000E000E000E000E040E040E040E04 -0E040E040708030801F00E1F7F9E13> I<0E0070FE07F01E00F00E00700E00700E00700E -00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00F00E00F006 -017003827800FC7F18157F941B> I<FF80FE1E00781E00300E00200E0020070040070040 -0780C003808003808001C10001C10000E20000E20000E200007400007400003800003800 -00380000100017157F941A> I<FF8FF87F3E01E03C1C01C0181C01E0180E01E0100E0260 -100E027010070270200704302007043820038438400388184003881C4001C81C8001D00C -8001D00E8000F00F0000E0070000E00700006006000040020020157F9423> I<FF83FE1F -00F00E00C007008007810003830001C20000E400007800007800003800003C00004E0000 -8F000187000103800201C00401E00C00E03E01F0FF03FE17157F941A> I<FF80FE1E0078 -1E00300E00200E00200700400700400780C003808003808001C10001C10000E20000E200 -00E200007400007400003800003800003800001000001000002000002000002000004000 -F04000F08000F180004300003C0000171F7F941A> I<3FFFC0380380300780200700600E -00401C00403C0040380000700000E00001E00001C0000380400700400F00400E00C01C00 -80380080780180700780FFFF8012157F9416> I<FFFFFFFFFFFF3001808C31> 124 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmbx12 14.4 19 -/Fl 19 118 df<00007FE0030007FFFC07001FFFFF0F007FF00F9F00FF0001FF01FC0000 -FF03F800007F07F000003F0FE000001F1FC000001F1FC000000F3F8000000F3F80000007 -7F800000077F800000077F00000000FF00000000FF00000000FF00000000FF00000000FF -00000000FF00000000FF00000000FF00000000FF000000007F000000007F800000007F80 -0000073F800000073F800000071FC00000071FC000000E0FE000000E07F000001C03F800 -003C01FC00007800FF0001F0007FF007C0001FFFFF800007FFFE0000007FF00028297CA8 -31> 67 D<FFFFFC0000FFFFFC0000FFFFFC000003FC00000003FC00000003FC00000003 -FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC -00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00 -000003FC00000003FC00000003FC00000003FC0001C003FC0001C003FC0001C003FC0001 -C003FC0003C003FC00038003FC00038003FC00078003FC00078003FC000F8003FC000F80 -03FC001F8003FC007F8003FC01FF00FFFFFFFF00FFFFFFFF00FFFFFFFF0022297EA828> -76 D<0000FFC00000000FFFFC0000003F807F000000FE001FC00001F80007E00003F000 -03F00007E00001F8000FE00001FC001FC00000FE001FC00000FE003F8000007F003F8000 -007F007F8000007F807F0000003F807F0000003F807F0000003F80FF0000003FC0FF0000 -003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000 -003FC0FF0000003FC0FF0000003FC07F0000003F807F8000007F807F8000007F803F8000 -007F003F8000007F001FC00000FE001FC00000FE000FE00001FC0007F00003F80003F800 -07F00001FC000FE00000FE001FC000003FC0FF0000000FFFFC00000000FFC000002A297C -A833> 79 D<FFFFF0007FFFFFFFF0007FFFFFFFF0007FFF03FE000001C001FE00000380 -01FE0000038001FF0000078000FF0000070000FF80000F00007F80000E00007FC0000E00 -003FC0001C00003FC0001C00003FE0003C00001FE0003800001FF0007800000FF0007000 -000FF80070000007F800E0000007F800E0000003FC01C0000003FC01C0000003FE03C000 -0001FE0380000001FF0780000000FF0700000000FF87000000007F8E000000007F8E0000 -00007FDE000000003FDC000000003FFC000000001FF8000000001FF8000000000FF00000 -00000FF0000000000FF00000000007E00000000007E00000000003C00000000003C00000 -30297FA833> 86 D<03FF80000FFFF0001F01FC003F80FE003F807F003F803F003F803F -801F003F8000003F8000003F8000003F8000003F80003FFF8001FC3F800FE03F801F803F -803F003F807E003F80FC003F80FC003F80FC003F80FC003F80FC005F807E00DF803F839F -FC1FFE0FFC03FC03FC1E1B7E9A21> 97 D<FFE00000FFE00000FFE000000FE000000FE0 -00000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0 -00000FE000000FE1FE000FEFFF800FFE07E00FF803F00FF001F80FE000FC0FE000FC0FE0 -007E0FE0007E0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0 -007F0FE0007E0FE0007E0FE0007E0FE000FC0FE000FC0FF001F80FF803F00F9C0FE00F0F -FF800E01FC00202A7EA925> I<00007FF000007FF000007FF0000007F0000007F0000007 -F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007 -F0003F87F001FFF7F007F03FF00FC00FF01F8007F03F0007F03F0007F07E0007F07E0007 -F07E0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007 -F07E0007F07E0007F03F0007F03F0007F01F800FF00FC01FF007E07FFF01FFE7FF007F87 -FF202A7EA925> 100 D<003FC00001FFF00003E07C000F803E001F801F001F001F003F00 -0F807E000F807E000FC07E000FC0FE0007C0FE0007C0FFFFFFC0FFFFFFC0FE000000FE00 -0000FE0000007E0000007E0000007F0000003F0001C01F0001C00F80038007C0070003F0 -1E0000FFFC00003FE0001A1B7E9A1F> I<0007F8003FFC007E3E01FC7F03F87F03F07F07 -F07F07F03E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007 -F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007 -F00007F00007F00007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF8018 -2A7EA915> I<FFE00000FFE00000FFE000000FE000000FE000000FE000000FE000000FE0 -00000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE07E000FE1 -FF800FE30FC00FE40FE00FE807E00FF807F00FF007F00FF007F00FE007F00FE007F00FE0 -07F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE0 -07F00FE007F00FE007F00FE007F00FE007F0FFFE3FFFFFFE3FFFFFFE3FFF202A7DA925> -104 D<07000F801FC03FE03FE03FE01FC00F8007000000000000000000000000000000FF -E0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F -E00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7EAA12> I<FFE0FFE0FFE00FE00FE00FE0 -0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 -0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE -0F2A7EA912> 108 D<FFC07E00FFC1FF80FFC30FC00FC40FE00FC807E00FD807F00FD007 -F00FD007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007 -F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F0FFFE3F -FFFFFE3FFFFFFE3FFF201B7D9A25> 110 D<003FE00001FFFC0003F07E000FC01F801F80 -0FC03F0007E03F0007E07E0003F07E0003F07E0003F0FE0003F8FE0003F8FE0003F8FE00 -03F8FE0003F8FE0003F8FE0003F8FE0003F87E0003F07E0003F03F0007E03F0007E01F80 -0FC00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22> I<FFE1FE00FFEFFF80FFFE0F -E00FF803F00FF001F80FE001FC0FE000FC0FE000FE0FE000FE0FE0007F0FE0007F0FE000 -7F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007E0FE000FE0FE000FE0FE000 -FC0FE001FC0FF001F80FF807F00FFC0FE00FEFFF800FE1FC000FE000000FE000000FE000 -000FE000000FE000000FE000000FE000000FE000000FE00000FFFE0000FFFE0000FFFE00 -0020277E9A25> I<FFC1F0FFC7FCFFC63E0FCC7F0FD87F0FD07F0FD07F0FF03E0FE0000F -E0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000F -E0000FE0000FE000FFFF00FFFF00FFFF00181B7F9A1B> 114 D<03FE300FFFF03E03F078 -00F07000F0F00070F00070F80070FE0000FFE0007FFF007FFFC03FFFE01FFFF007FFF800 -FFF80007FC0000FCE0007CE0003CF0003CF00038F80038FC0070FF01E0E7FFC0C1FF0016 -1B7E9A1B> I<00E00000E00000E00000E00001E00001E00001E00003E00003E00007E000 -0FE0001FFFE0FFFFE0FFFFE00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000 -0FE0000FE0000FE0000FE0000FE0000FE0700FE0700FE0700FE0700FE0700FE0700FE070 -07F0E003F0C001FF80007F0014267FA51A> I<FFE07FF0FFE07FF0FFE07FF00FE007F00F -E007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00F -E007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE00FF00F -E00FF007E017F003F067FF01FFC7FF007F87FF201B7D9A25> I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmr12 14.4 20 -/Fm 20 118 df<78FCFCFEFE7A02020202040404080810204007127B8510> 44 -D<00200000E00001E0000FE000FFE000F1E00001E00001E00001E00001E00001E00001E0 -0001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E0 -0001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E0 -0001E00003F000FFFFC0FFFFC012287BA71D> 49 D<01FC0007FF000C0FC01803E02001 -F06001F04000F84000F8F800FCFC00FCFC007CFC007CFC007C7800FC0000FC0000F80000 -F80001F00001F00003E00003C0000780000700000E00001C0000380000300000600000C0 -000180000300040200040400080800081000082000183FFFF87FFFF0FFFFF0FFFFF01628 -7DA71D> I<000FC0003FF000F01801C01803803C07007C0F007C0E00381E00003C00003C -00003C0000780000780000780000F83F00F8C1C0F900E0FA0070FA0038FC003CFC001EFC -001EF8001EF8001FF8001FF8001FF8001F78001F78001F78001F78001F3C001E3C001E1C -003C1E003C0E007807007003C1E001FFC0007E0018297EA71D> 54 -D<007E0001FF800781C00F00E01E00703C00383C003878003C78003CF8001EF8001EF800 -1EF8001EF8001FF8001FF8001FF8001F78001F78003F78003F3C003F1C005F0E005F0700 -9F03831F00FC1F00001E00001E00001E00003E00003C00003C0000381C00783E00703E00 -E03C01C01803801C0F000FFE0003F80018297EA71D> 57 D<0000FF00100007FFE03000 -1FC07830003E000C7000F80006F001F00003F003E00001F007C00000F00F800000700F80 -0000701F000000303F000000303E000000303E000000107E000000107E000000107C0000 -0000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC000000 -00FC00000000FC0000FFFF7C0000FFFF7E000003F07E000001F03E000001F03E000001F0 -3F000001F01F000001F00F800001F00F800001F007C00001F003E00001F001F00002F000 -F80002F0003E000C70001FC038300007FFE0100000FF8000282B7DA92E> 71 -D<01FFFE01FFFE0007E00003E00003E00003E00003E00003E00003E00003E00003E00003 -E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003 -E00003E00003E00003E00003E00003E00003E00003E03003E07803E0FC03E0FC03E0FC03 -C0F807C0400780200F00300E000C3C0003F000172A7DA81E> 74 -D<0001FF0000000F01E000003C0078000078003C0000E0000E0001E0000F0003C0000780 -07800003C00F800003E01F000001F01F000001F03E000000F83E000000F87E000000FC7E -000000FC7C0000007C7C0000007CFC0000007EFC0000007EFC0000007EFC0000007EFC00 -00007EFC0000007EFC0000007EFC0000007EFC0000007E7C0000007C7E000000FC7E0000 -00FC7E000000FC3E000000F83F000001F81F000001F01F000001F00F800003E007800003 -C007C00007C003E0000F8000F0001E000078003C00003C007800000F01E0000001FF0000 -272B7DA92E> 79 D<03FC00000C070000100380003C01C0003E01E0003E00F0001C00F0 -000800F0000000F0000000F0000000F000007FF00003E0F0000F80F0001E00F0003C00F0 -007C00F0007800F040F800F040F800F040F800F040F801F0407C01F0403C0278801E0C7F -8007F01E001A1A7E991D> 97 D<0F000000FF000000FF0000001F0000000F0000000F00 -00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00 -00000F0000000F07E0000F1838000F600E000F8007000F8007800F0003C00F0003C00F00 -01E00F0001E00F0001F00F0001F00F0001F00F0001F00F0001F00F0001F00F0001F00F00 -01E00F0001E00F0003E00F0003C00F0003800F8007800E800F000E401C000C303800080F -C0001C2A7EA921> I<007F0001C0E00700100E00781E00F83C00F83C00707C0020780000 -F80000F80000F80000F80000F80000F80000F80000F800007800007C00003C00083C0008 -1E00100E002007006001C180007E00151A7E991A> I<00FC000387800701C00E01E01C00 -E03C00F03C00F0780078780078F80078F80078FFFFF8F80000F80000F80000F80000F800 -007800007800003C00083C00081E00100E002007004001C180007E00151A7E991A> 101 -D<00000F0001FC3080070743800E03C3801E03C1003C01E0003C01E0007C01F0007C01F0 -007C01F0007C01F0007C01F0003C01E0003C01E0001E03C0000E0380001707000011FC00 -0030000000300000003000000030000000180000001FFF80000FFFF00007FFF80018007C -0030001E0070000E0060000700E0000700E0000700E0000700E000070070000E0070000E -0038001C001C0038000781E00000FF000019287E9A1D> 103 D<1E003F003F003F003F00 -1E000000000000000000000000000000000000000F00FF00FF001F000F000F000F000F00 -0F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00FFF0FFF0 -0C297EA811> 105 D<007E0003C3C00700E00E00701C00383C003C3C003C78001E78001E -F8001FF8001FF8001FF8001FF8001FF8001FF8001FF8001F78001E78001E3C003C3C003C -1C00380E00700700E003C3C0007E00181A7E991D> 111 D<003F010001E0830003804300 -0F0027001E0017001E001F003C000F007C000F007C000F0078000F00F8000F00F8000F00 -F8000F00F8000F00F8000F00F8000F00F8000F007C000F007C000F003C000F003E001F00 -1E001F000F002F0007804F0001C18F00007E0F0000000F0000000F0000000F0000000F00 -00000F0000000F0000000F0000000F0000000F0000000F000000FFF00000FFF01C267E99 -1F> 113 D<0F0F80FF11C0FF23E01F43E00F83E00F81C00F80000F00000F00000F00000F -00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F -00000F8000FFFC00FFFC00131A7E9917> I<07F0801C0D80300380600180E00180E00080 -E00080F00080F800007E00007FE0003FFC001FFE0007FF00003F800007808003C08003C0 -8001C0C001C0C001C0E00180E00380F00300CC0E0083F800121A7E9917> I<0080000080 -000080000080000180000180000180000380000380000780000F80001FFF80FFFF800780 -000780000780000780000780000780000780000780000780000780000780000780000780 -0007804007804007804007804007804007804007804003C08001C08000E100003E001225 -7FA417> I<0F000F00FF00FF00FF00FF001F001F000F000F000F000F000F000F000F000F -000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F -000F000F000F000F000F000F000F001F000F001F0007002F0003804F8001C08FF0007F0F -F01C1A7E9921> I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmr17 20.74 18 -/Fn 18 119 df<000001FF00008000001FFFE0018000007F007801800001F8000E038000 -03E000070780000FC000018780001F000000CF80003E0000006F80007C0000003F8000F8 -0000003F8001F00000001F8003F00000000F8007E00000000F8007C000000007800FC000 -000007800FC000000007801F8000000003801F8000000003803F8000000003803F000000 -0001803F0000000001807F0000000001807F0000000001807E0000000000007E00000000 -0000FE000000000000FE000000000000FE000000000000FE000000000000FE0000000000 -00FE000000000000FE000000000000FE000000000000FE000000000000FE000000000000 -FE0000000000007E0000000000007E0000000000007F0000000000007F0000000001803F -0000000001803F0000000001803F8000000001801F8000000001801F8000000003000FC0 -00000003000FC0000000030007E0000000060007E0000000060003F0000000060001F000 -00000C0000F80000001800007C0000001800003E0000003000001F0000006000000FC000 -01C0000003E0000380000001F8000E000000007F007C000000001FFFF00000000001FF00 -0000313D7CBB39> 67 D<FFFFFC000000FFFFFC00000003FE0000000001F80000000001 -F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001 -F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001 -F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001 -F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001 -F80000000001F80000000001F80000000001F80000000001F80000000001F80000000001 -F80000000001F80000000001F80000000001F80000006001F80000006001F80000006001 -F80000006001F80000006001F8000000E001F8000000C001F8000000C001F8000000C001 -F8000000C001F8000001C001F8000001C001F8000001C001F8000003C001F8000007C001 -F8000007C001F800000FC001F800003F8001F80000FF8003FC0007FF80FFFFFFFFFF80FF -FFFFFFFF802B3B7CBA32> 76 D<000003FF00000000001E01E000000000F0003C000000 -03C0000F000000078000078000000F000003C000003E000001F000007C000000F80000F8 -0000007C0001F00000003E0001F00000003E0003E00000001F0007E00000001F8007C000 -00000F800FC00000000FC00F8000000007C01F8000000007E01F8000000007E03F000000 -0003F03F0000000003F03F0000000003F07F0000000003F87E0000000001F87E00000000 -01F87E0000000001F8FE0000000001FCFE0000000001FCFE0000000001FCFE0000000001 -FCFE0000000001FCFE0000000001FCFE0000000001FCFE0000000001FCFE0000000001FC -FE0000000001FCFE0000000001FC7E0000000001F87F0000000003F87F0000000003F87F -0000000003F87F0000000003F83F0000000003F03F8000000007F01F8000000007E01F80 -00000007E01FC00000000FE00FC00000000FC007C00000000F8007E00000001F8003E000 -00001F0001F00000003E0001F80000007E0000F80000007C00007C000000F800003E0000 -01F000000F000003C000000780000780000003E0001F00000000F8007C000000001E01E0 -0000000003FF000000363D7CBB3E> 79 D<003F80000001C0F0000003003C000004001E -00000C000F000018000780001C0007C0003E0003C0003F0003E0003F0003E0003F0003E0 -001E0003E000000003E000000003E000000003E00000003FE000000FF3E000007E03E000 -01F803E00003E003E0000FC003E0001F8003E0003F0003E0003E0003E0007E0003E0007E -0003E060FC0003E060FC0003E060FC0003E060FC0007E060FC0007E0607C000BE0607E00 -0BE0603E0011F0C01F0060F0C007C1807F8000FE003E0023257CA427> 97 -D<03E0000000FFE0000000FFE000000007E000000003E000000003E000000003E0000000 -03E000000003E000000003E000000003E000000003E000000003E000000003E000000003 -E000000003E000000003E000000003E000000003E000000003E000000003E000000003E0 -00000003E000000003E03FC00003E0E0780003E3001C0003E6000F0003E800078003F800 -03C003F00001E003E00001F003E00000F003E00000F803E00000F803E00000FC03E00000 -7C03E000007C03E000007E03E000007E03E000007E03E000007E03E000007E03E000007E -03E000007E03E000007E03E000007E03E000007C03E000007C03E00000FC03E00000F803 -E00000F803E00001F003E00001E003F00003E003D80003C003C80007800384000E000383 -001C000381C0F00003003F8000273C7EBB2C> I<0007F800003C0E0000F0018001E000C0 -03C00060078000300F0000701F0000F81F0001F83E0001F83E0001F87E0000F07C000000 -7C000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000 -FC0000007C0000007C0000007E0000003E0000003E00000C1F00000C1F0000180F800018 -0780003003C0006001E000C000F00180003C0E000007F8001E257DA423> I<0007F80000 -3C1E0000F0078001C003C003C001E0078000F00F0000F81F0000781E00007C3E00007C3E -00007C7E00003E7C00003E7C00003EFC00003EFC00003EFFFFFFFEFC000000FC000000FC -000000FC000000FC000000FC0000007C0000007C0000007E0000003E0000003E0000061F -0000060F00000C0F80000C0780001803C0003000E00060007000C0001E07000003FC001F -257EA423> 101 D<0000FC0000078300000E0380001C07C0003C0FC000780FC000F80FC0 -00F8078000F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00000 -01F0000001F0000001F0000001F0000001F0000001F0000001F00000FFFFFC00FFFFFC00 -01F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00000 -01F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00000 -01F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00000 -01F0000001F0000001F0000001F0000001F0000003F800007FFFE0007FFFE0001A3C7FBB -18> I<07000F801FC01FC01FC00F80070000000000000000000000000000000000000000 -0000000000000007C0FFC0FFC00FC007C007C007C007C007C007C007C007C007C007C007 -C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007 -C007C00FE0FFFEFFFE0F397DB815> 105 D<0003800007C0000FE0000FE0000FE00007C0 -000380000000000000000000000000000000000000000000000000000000000000000000 -0000000000000007E000FFE000FFE0000FE00003E00003E00003E00003E00003E00003E0 -0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0 -0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0 -0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0 -7803C0FC07C0FC0780FC0780FC0F00780E00381C000FE000134A82B818> I<07C0FFC0FF -C00FC007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007 -C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007 -C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007 -C00FE0FFFEFFFE0F3C7DBB15> 108 D<03E01FE0003FC000FFE0607C00C0F800FFE0801E -01003C0007E3000F06001E0003E4000F88001F0003E4000F88001F0003E8000790000F00 -03E80007D0000F8003F00007E0000F8003F00007E0000F8003E00007C0000F8003E00007 -C0000F8003E00007C0000F8003E00007C0000F8003E00007C0000F8003E00007C0000F80 -03E00007C0000F8003E00007C0000F8003E00007C0000F8003E00007C0000F8003E00007 -C0000F8003E00007C0000F8003E00007C0000F8003E00007C0000F8003E00007C0000F80 -03E00007C0000F8003E00007C0000F8003E00007C0000F8003E00007C0000F8003E00007 -C0000F8003E00007C0000F8003E00007C0000F8003E00007C0000F8003E00007C0000F80 -07F0000FE0001FC0FFFF81FFFF03FFFEFFFF81FFFF03FFFE3F257EA443> I<03E01FE000 -FFE0607C00FFE0801E0007E3000F0003E4000F8003E4000F8003E800078003E80007C003 -F00007C003F00007C003E00007C003E00007C003E00007C003E00007C003E00007C003E0 -0007C003E00007C003E00007C003E00007C003E00007C003E00007C003E00007C003E000 -07C003E00007C003E00007C003E00007C003E00007C003E00007C003E00007C003E00007 -C003E00007C003E00007C003E00007C003E00007C007F0000FE0FFFF81FFFFFFFF81FFFF -28257EA42C> I<0007FC0000001C070000007001C00001E000F00003C00078000780003C -000F00001E001F00001F001E00000F003E00000F803E00000F807C000007C07C000007C0 -7C000007C0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC000007E0FC -000007E0FC000007E0FC000007E07C000007C07C000007C07E00000FC03E00000F803E00 -000F801E00000F001F00001F000F00001E000780003C0003C000780001E000F000007001 -C000001C0700000007FC000023257EA427> I<03E03E00FFE0C300FFE1078007E20FC003 -E40FC003E80FC003E8078003E8030003F0000003F0000003F0000003E0000003E0000003 -E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003 -E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003 -E0000003E0000003E0000007F00000FFFFC000FFFFC0001A257EA41E> 114 -D<00FF02000700C6000C002E0010001E0030001E0060000E0060000E00E0000600E00006 -00E0000600F0000600F8000600FC0000007F0000003FF000003FFF80000FFFE00007FFF0 -0001FFFC00003FFE000001FE0000003F00C0001F00C0000F80C0000780E0000380E00003 -80E0000380E0000380F0000300F0000300F8000700F8000600E4000C00E2001800C18070 -00807F800019257DA41F> I<003000000030000000300000003000000030000000300000 -0070000000700000007000000070000000F0000000F0000001F0000001F0000003F00000 -07F000001FFFFE00FFFFFE0001F0000001F0000001F0000001F0000001F0000001F00000 -01F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00000 -01F0000001F0000001F0000001F0000001F0018001F0018001F0018001F0018001F00180 -01F0018001F0018001F0018001F0018000F0010000F8030000F8030000780200003C0400 -000E08000003F00019357FB41E> I<FFFE000FFFFFFE000FFF07F00007F803E00003E003 -E00001C001F00001C001F000018001F800018000F800030000F8000300007C000600007C -000600007E000600003E000C00003E000C00003F001C00001F001800001F001800000F80 -3000000F803000000FC070000007C060000007C060000003E0C0000003E0C0000003F1C0 -000001F180000001F180000000FB00000000FB00000000FF000000007E000000007E0000 -00003C000000003C000000003C0000000018000028257FA42A> 118 -D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 300dpi -TeXDict begin -%%PaperSize: a4 - -userdict/PStoPSxform PStoPSmatrix matrix currentmatrix - matrix invertmatrix matrix concatmatrix - matrix invertmatrix put -%%EndSetup -%%Page: (0,1) 1 -userdict/PStoPSsaved save put -PStoPSmatrix setmatrix -595.000000 0.271378 translate -90 rotate -0.706651 dup scale -userdict/PStoPSmatrix matrix currentmatrix put -userdict/PStoPSclip{0 0 moveto - 595.000000 0 rlineto 0 842.000000 rlineto -595.000000 0 rlineto - closepath}put initclip -/showpage{}def/copypage{}def/erasepage{}def -PStoPSxform concat -1 0 bop Fn 281 370 a(Cleaner) p 570 370 a(seman) n(tics) p -927 370 a(for) p 1047 370 a(Ob) t(jectiv) n(e) p 1404 -370 a(Lab) r(el) p Fm 717 518 a(Jacques) p 934 518 a(Garrigue) 719 -634 y(Octob) r(er) p 945 634 a(26,) p 1040 634 a(1999) p -Fl 11 836 a(Credits) p Fk 11 929 a(This) p 122 929 a(prop) q(osal) p -319 929 a(con) o(tains) p 510 929 a(ideas) p 632 929 -a(from) p 747 929 a(Damien) p 928 929 a(Doligez) p 1101 -929 a(and) p 1196 929 a(Pierre) p 1340 929 a(W) l(eis.) p -Fl 11 1073 a(Lab) r(els) p 221 1073 a(and) p 351 1073 -a(optionals) p Fk 11 1165 a(Lab) q(els) p 165 1165 a(and) p -259 1165 a(optional) p 449 1165 a(argumen) o(ts) p 687 -1165 a(had) p 781 1165 a(t) o(w) o(o) p 873 1165 a(problems) p -1082 1165 a(in) p 1139 1165 a(Ob) s(jectiv) o(e) p 1360 -1165 a(Lab) q(el.) p Fj 83 1280 a(\017) p Fk 133 1280 -a(They) p 259 1280 a(w) o(ere) p 372 1280 a(not) p 459 -1280 a(fully) p 570 1280 a(coheren) o(t) p 767 1280 a(with) p -878 1280 a(the) p 963 1280 a(original) p 1139 1280 a(call-b) o(y-v) m -(alue) p 1423 1280 a(seman) o(tics) p 1644 1280 a(of) p -1700 1280 a(the) p 1784 1280 a(lan-) 133 1340 y(guage.) p -303 1340 a(In) p 368 1340 a(some) p 495 1340 a(\(subtle\)) p -681 1340 a(cases,) p 823 1340 a(a) p 868 1340 a(side-e\013ect) p -1099 1340 a(migh) o(t) p 1243 1340 a(get) p 1329 1340 -a(dela) o(y) o(ed) p 1508 1340 a(more) p 1635 1340 a(than) p -1753 1340 a(in) p 1814 1340 a(an) 133 1400 y(un) o(t) o(yp) q(ed) p -322 1400 a(seman) o(tics.) p Fj 83 1502 a(\017) p Fk -133 1502 a(F) l(or) p 220 1502 a(optional) p 410 1502 -a(argumen) o(ts,) p 660 1502 a(no) p 728 1502 a(un) o(t) o(yp) q(ed) p -918 1502 a(seman) o(tics) p 1139 1502 a(existed.) 84 -1616 y(This) p 195 1616 a(new) p 295 1616 a(prop) q(osal) p -492 1616 a(corrects) p 674 1616 a(these) p 799 1616 a(t) o(w) o(o) p -891 1616 a(\015a) o(ws.) p Fi 11 1746 a(Syn) n(tax) p -Fk 11 1838 a(W) l(e) p 95 1838 a(k) o(eep) p 206 1838 -a(Ob) s(jectiv) o(e) p 426 1838 a(Lab) q(el's) p 594 -1838 a(syn) o(tax,) p 764 1838 a(except) p 917 1838 a(for) p -991 1838 a(default) p 1155 1838 a(v) m(alues) p 1301 -1838 a(in) p 1357 1838 a(optional) p 1547 1838 a(argumen) o(ts.) p -Fh 329 1944 a(typ) n(expr) p Fk 528 1944 a(::=) p Fg -634 1944 a(:) p 656 1944 a(:) p 678 1944 a(:) p Fj 579 -2004 a(j) p Fh 634 2004 a(typ) n(expr) p Fj 806 2004 -a(!) p Fh 870 2004 a(typ) n(expr) p Fj 579 2064 a(j) p -Fk 634 2064 a([?]) p Fi(lab) r(el) p Fk 801 2064 a(:) p -Fh(typ) n(expr) p Fj 987 2064 a(!) p Fh 1050 2064 a(typ) n(expr) 391 -2124 y(expr) p Fk 528 2124 a(::=) p Fg 634 2124 a(:) p -656 2124 a(:) p 678 2124 a(:) p Fj 579 2185 a(j) p Fh -634 2185 a(expr) p 746 2185 a(lab) n(ele) n(d-expr) p -Ff 991 2163 a(+) p Fj 579 2245 a(j) p Fe 634 2245 a(fun) p -Fj 728 2245 a(f) p Fh(lab) n(ele) n(d-simple-p) n(attern) p -Fj 1209 2245 a(g) p Ff 1234 2227 a(+) p Fk 1280 2245 -a([) p Fe(when) p Fh 1412 2245 a(expr) p Fk 1507 2245 -a(]) p Fj 1535 2245 a(!) p Fh 1599 2245 a(expr) p Fj -579 2305 a(j) p Fe 634 2305 a(function) p Fh 856 2305 -a(lab) n(ele) n(d-p) n(attern) p Fk 1177 2305 a([) p -Fe(when) p Fh 1309 2305 a(expr) p Fk 1404 2305 a(]) p -Fj 1432 2305 a(!) p Fh 1496 2305 a(expr) p Fj 785 2365 -a(f) p Fe(|) p Fh 851 2365 a(lab) n(ele) n(d-p) n(attern) p -Fk 1172 2365 a([) p Fe(when) p Fg 1305 2365 a(expr) p -Fk 1403 2365 a(]) p Fj 1430 2365 a(!) p Fh 1494 2365 -a(expr) p Fj 1589 2365 a(g) p Fd 1614 2347 a(\003) p -Fh 242 2425 a(lab) n(ele) n(d-expr) p Fk 528 2425 a(::=) p -634 2425 a([?]) p Fh(expr) p Fj 579 2486 a(j) p Fk 634 -2486 a([?]) p Fi(lab) r(el) p Fk 801 2486 a(:) p Fh(expr) 182 -2546 y(lab) n(ele) n(d-p) n(attern) p Fk 528 2546 a(::=) p -Fh 634 2546 a(p) n(attern) p Fj 579 2606 a(j) p Fi 634 -2606 a(lab) r(el) p Fk 751 2606 a(:) p Fh(p) n(attern) p -Fj 579 2666 a(j) p Fk 634 2666 a(?[) p Fe(\() p Fh(expr) p -Fe(\)) p Fk(]) p Fi(lab) r(el) p Fk 943 2666 a(:) p Fh -956 2666 a(p) n(attern) p Fk 926 2937 a(1) p eop -PStoPSsaved restore -userdict/PStoPSsaved save put -PStoPSmatrix setmatrix -595.000000 421.271378 translate -90 rotate -0.706651 dup scale -userdict/PStoPSmatrix matrix currentmatrix put -userdict/PStoPSclip{0 0 moveto - 595.000000 0 rlineto 0 842.000000 rlineto -595.000000 0 rlineto - closepath}put initclip -PStoPSxform concat -2 1 bop Fi 11 168 a(Dynamic) p 247 168 a(seman) n(tics) p -Fj 11 261 a(;) p Fk 52 261 a(is) p 101 261 a(a) p 141 -261 a(notation) p 337 261 a(for) p 411 261 a(the) p 495 -261 a(empt) o(y) p 644 261 a(lab) q(el.) 86 366 y(\() p -Fe(fun) p Fi 198 366 a(l) p Fc 214 373 a(i) p Fk 227 -366 a(:) p Fg(x) p Fj 282 366 a(!) p Fg 346 366 a(e) p -Fk(\)) p Fi 404 366 a(l) p Fc 420 373 a(1) p Fk 442 366 -a(:) p Fg 455 366 a(e) p Ff 478 373 a(1) p Fg 506 366 -a(:) p 528 366 a(:) p 550 366 a(:) p Fi 571 366 a(l) p -Fc 587 373 a(n) p Fk 612 366 a(:) p Fg 625 366 a(e) p -Fb 648 373 a(n) p Fj 515 427 a(!) p Fk 579 427 a(\() p -Fg(e) p Fk([) p Fg(e) p Fb 658 434 a(i) p Fg 671 427 -a(=x) p Fk(]) p Fi 752 427 a(l) p Fc 768 434 a(1) p Fk -790 427 a(:) p Fg(e) p Ff 827 434 a(1) p Fg 855 427 a(:) p -877 427 a(:) p 899 427 a(:) p Fi 920 427 a(l) p Fc 936 -434 a(i) p Fd(\000) p Fc(1) p Fk 997 427 a(:) p Fg 1010 -427 a(e) p Fb 1033 434 a(i) p Fd(\000) p Ff(1) p Fi 1108 -427 a(l) p Fc 1124 434 a(i) p Ff(+) p Fc(1) p Fk 1185 -427 a(:) p Fg(e) p Fb 1222 434 a(i) p Ff(+1) p Fg 1289 -427 a(:) p 1311 427 a(:) p 1333 427 a(:) p Fi 1354 427 -a(l) p Fc 1370 434 a(n) p Fk 1395 427 a(:) p Fg 1408 -427 a(e) p Fb 1431 434 a(n) p Fk 86 487 a(\() p Fe(fun) p -Fk 198 487 a(?) p Fi(l) p Fc 237 494 a(i) p Fk 250 487 -a(:) p Fg(x) p Fj 305 487 a(!) p Fg 369 487 a(e) p Fk(\)) p -Fi 427 487 a(l) p Fc 443 494 a(1) p Fk 465 487 a(:) p -Fg 478 487 a(e) p Ff 501 494 a(1) p Fg 529 487 a(:) p -551 487 a(:) p 573 487 a(:) p Fi 594 487 a(l) p Fc 610 -494 a(n) p Fk 635 487 a(:) p Fg 648 487 a(e) p Fb 671 -494 a(n) p Fj 515 547 a(!) p Fg 579 547 a(e) p Fk([) p -Fe(Some) p Fk 717 547 a(\() p Fg(e) p Fb 759 554 a(i) p -Fk 773 547 a(\)) p Fg(=x) p Fk(]) p Fi 874 547 a(l) p -Fc 890 554 a(1) p Fk 912 547 a(:) p Fg 925 547 a(e) p -Ff 948 554 a(1) p Fg 976 547 a(:) p 998 547 a(:) p 1020 -547 a(:) p Fi 1042 547 a(l) p Fc 1058 554 a(i) p Fd(\000) p -Fc(1) p Fk 1118 547 a(:) p Fg(e) p Fb 1155 554 a(i) p -Fd(\000) p Ff(1) p Fi 1230 547 a(l) p Fc 1246 554 a(i) p -Ff(+) p Fc(1) p Fk 1307 547 a(:) p Fg 1320 547 a(e) p -Fb 1343 554 a(i) p Ff(+1) p Fg 1410 547 a(:) p 1432 547 -a(:) p 1454 547 a(:) p Fi 1476 547 a(l) p Fc 1492 554 -a(n) p Fk 1516 547 a(:) p Fg(e) p Fb 1553 554 a(n) p -Fk 86 607 a(\() p Fe(fun) p Fk 198 607 a(?) p Fi(l) p -Fk(:) p Fg 250 607 a(x) p Fj 292 607 a(!) p Fg 356 607 -a(e) p Fk(\)) p Fi 413 607 a(l) p Fc 429 614 a(1) p Fk -451 607 a(:) p Fg(e) p Ff 488 614 a(1) p Fg 516 607 a(:) p -538 607 a(:) p 560 607 a(:) p Fi 581 607 a(l) p Fc 597 -614 a(n) p Fk 621 607 a(:) p Fg(e) p Fb 658 614 a(n) p -Fk 1154 607 a(when) p Fi 1281 607 a(l) p Fc 1297 614 -a(i) p Fk 1324 607 a(=) p Fj 1376 607 a(;) p Fk 1417 -607 a(and) p Fg 1512 607 a(l) p Fj 1541 607 a(62) p 1588 -607 a(f) p Fi(l) p Fc 1629 614 a(1) p Fg 1660 607 a(:) p -1682 607 a(:) p 1704 607 a(:) p Fi 1725 607 a(l) p Fc -1741 614 a(n) p Fj 1765 607 a(g) 515 667 y(!) p Fg 579 -667 a(e) p Fk([) p Fe(None) p Fg 717 667 a(=x) p Fk(]) p -Fi 799 667 a(l) p Fc 815 674 a(1) p Fk 837 667 a(:) p -Fg(e) p Ff 874 674 a(1) p Fg 901 667 a(:) p 923 667 a(:) p -945 667 a(:) p Fi 967 667 a(l) p Fc 983 674 a(n) p Fk -1007 667 a(:) p Fg(e) p Fb 1044 674 a(n) p Fk 86 728 -a(\(\() p Fe(fun) p Fi 217 728 a(l) p Fk(:) p Fg 246 -728 a(x) p Fj 288 728 a(!) p Fg 352 728 a(e) p Fk(\)) p -Fi 409 728 a(l) p Fc 425 735 a(1) p Fk 447 728 a(:) p -Fg(e) p Ff 484 735 a(1) p Fg 511 728 a(:) p 533 728 a(:) p -555 728 a(:) p Fi 577 728 a(l) p Fc 593 735 a(m) p Fk -629 728 a(:) p Fg 642 728 a(e) p Fb 665 735 a(m) p Fk -698 728 a(\)) p Fi 733 728 a(l) p Fc 749 735 a(m) p Ff(+) p -Fc(1) p Fk 833 728 a(:) p Fg 846 728 a(e) p Fb 869 735 -a(m) p Ff(+1) p Fg 955 728 a(:) p 977 728 a(:) p 999 -728 a(:) p Fi 1021 728 a(l) p Fc 1037 735 a(n) p Fk 1061 -728 a(:) p Fg(e) p Fb 1098 735 a(n) p Fk 1373 728 a(when) p -Fi 1501 728 a(l) p Fj 1530 728 a(62) p 1577 728 a(f) p -Fi(l) p Fc 1618 735 a(1) p Fg 1648 728 a(:) p 1670 728 -a(:) p 1692 728 a(:) p Fi 1714 728 a(l) p Fc 1730 735 -a(m) p Fj 1765 728 a(g) 515 788 y(!) p Fk 579 788 a(\() p -Fe(fun) p Fi 691 788 a(l) p Fk(:) p Fg 720 788 a(x) p -Fj 761 788 a(!) p Fg 825 788 a(e) p Fk(\)) p Fi 883 788 -a(l) p Fc 899 795 a(1) p Fk 921 788 a(:) p Fg 934 788 -a(e) p Ff 957 795 a(1) p Fg 985 788 a(:) p 1007 788 a(:) p -1029 788 a(:) p Fi 1051 788 a(l) p Fc 1067 795 a(n) p -Fk 1091 788 a(:) p Fg 1104 788 a(e) p Fb 1127 795 a(n) p -Fk 86 848 a(\(\() p Fe(fun) p Fk 217 848 a(?) p Fi(l) p -Fk(:) p Fg 269 848 a(x) p Fj 311 848 a(!) p Fg 375 848 -a(e) p Fk(\)) p Fi 432 848 a(l) p Fc 448 855 a(1) p Fk -470 848 a(:) p Fg(e) p Ff 507 855 a(1) p Fg 535 848 a(:) p -557 848 a(:) p 579 848 a(:) p Fi 600 848 a(l) p Fc 616 -855 a(m) p Fk 652 848 a(:) p Fg 665 848 a(e) p Fb 688 -855 a(m) p Fk 721 848 a(\)) p Fi 756 848 a(l) p Fc 772 -855 a(m) p Ff(+) p Fc(1) p Fk 856 848 a(:) p Fg 869 848 -a(e) p Fb 892 855 a(m) p Ff(+1) p Fg 978 848 a(:) p 1000 -848 a(:) p 1022 848 a(:) p Fi 1044 848 a(l) p Fc 1060 -855 a(n) p Fk 1084 848 a(:) p Fg(e) p Fb 1121 855 a(n) p -Fk 1261 848 a(when) p Fj 1388 848 a(f) p Fi(l) p Fg(;) p -Fj 1451 848 a(;g) p 1530 848 a(6) m(\\) p 1577 848 a(f) p -Fi(l) p Fc 1618 855 a(1) p Fg 1648 848 a(:) p 1670 848 -a(:) p 1692 848 a(:) p Fi 1714 848 a(l) p Fc 1730 855 -a(m) p Fj 1765 848 a(g) 515 908 y(!) p Fk 579 908 a(\() p -Fe(fun) p Fk 691 908 a(?) p Fi(l) p Fk(:) p Fg 743 908 -a(x) p Fj 785 908 a(!) p Fg 848 908 a(e) p Fk(\)) p Fi -906 908 a(l) p Fc 922 915 a(1) p Fk 944 908 a(:) p Fg(e) p -Ff 981 915 a(1) p Fg 1008 908 a(:) p 1030 908 a(:) p -1052 908 a(:) p Fi 1074 908 a(l) p Fc 1090 915 a(n) p -Fk 1114 908 a(:) p Fg 1127 908 a(e) p Fb 1150 915 a(n) p -Fi 11 1035 a(T) n(yping) p Fk 11 1127 a(Seman) o(tics) p -240 1127 a(are) p 321 1127 a(k) o(ept) p 430 1127 a(throughout) p -685 1127 a(compilation) p 950 1127 a(b) o(y) p 1018 1127 -a(disallo) o(wing) p 1269 1127 a(lab) q(el) p 1387 1127 -a(comm) o(utation) p 1684 1127 a(for) p 1759 1127 a(func-) 11 -1187 y(tion) p 116 1187 a(t) o(yp) q(es.) p 278 1187 -a(Ho) o(w) o(ev) o(er,) p 494 1187 a(the) p 583 1187 -a(original) p 764 1187 a(comfort) p 949 1187 a(of) p -1009 1187 a(out-of-order) p 1283 1187 a(application) p -1540 1187 a(is) p 1594 1187 a(reco) o(v) o(ered) p 1814 -1187 a(b) o(y) 11 1247 y(allo) o(wing) p 207 1247 a(argumen) o(t) p -431 1247 a(reordering) p 670 1247 a(in) p 732 1247 a(application,) p -1005 1247 a(when) p 1138 1247 a(the) p 1227 1247 a(function's) p -1457 1247 a(t) o(yp) q(e) p 1572 1247 a(is) p Fh 1626 -1247 a(wel) r(l) p 1731 1247 a(known) p Fk 11 1308 a(\() p -Fh(c.f.) p Fk 118 1308 a(p) q(olymorphic) p 400 1308 -a(metho) q(ds\).) p Fl 11 1452 a(V) p 56 1452 a(arian) n(ts) p -Fk 11 1544 a(V) l(arian) o(t) p 187 1544 a(t) o(yping,) p -355 1544 a(as) p 417 1544 a(it) p 468 1544 a(is) p 519 -1544 a(presen) o(ted) p 739 1544 a(in) p 798 1544 a(the) p -884 1544 a(user's) p 1022 1544 a(man) o(ual,) p 1210 -1544 a(is) p 1261 1544 a(not) p 1350 1544 a(principal:) p -1576 1544 a(in) p 1635 1544 a(some) p 1760 1544 a(cases) 11 -1605 y(t) o(ypabilit) o(y) p 239 1605 a(of) p 301 1605 -a(an) p 375 1605 a(expression) p 616 1605 a(ma) o(y) p -728 1605 a(dep) q(end) p 904 1605 a(on) p 978 1605 a(the) p -1069 1605 a(order) p 1202 1605 a(in) p 1265 1605 a(whic) o(h) p -1411 1605 a(the) p 1502 1605 a(t) o(yping) p 1660 1605 -a(algorithm) 11 1665 y(pro) q(ceeds.) p Fe 133 1779 a(#) p -184 1779 a(let) p 286 1779 a(f1) p 363 1779 a(\(x) p -440 1779 a(:) p 491 1779 a([<) p 568 1779 a(a) p 620 -1779 a(b\(int\)]\)) p 850 1779 a(=) p 902 1779 a(\(\)) 184 -1839 y(let) p 286 1839 a(f2) p 363 1839 a(\(x) p 440 -1839 a(:) p 491 1839 a([<) p 568 1839 a(a]\)) p 671 1839 -a(=) p 722 1839 a(\(\)) 184 1899 y(let) p 286 1899 a(f3) p -363 1899 a(\(x) p 440 1899 a(:) p 491 1899 a([<) p 568 -1899 a(a) p 620 1899 a(b\(bool\)]\)) p 876 1899 a(=) p -927 1899 a(\(\);;) 133 1960 y(val) p 235 1960 a(f1) p -312 1960 a(:) p 363 1960 a([<) p 440 1960 a(a) p 491 -1960 a(b\(int\)]) p 696 1960 a(->) p 773 1960 a(unit) p -902 1960 a(=) p 953 1960 a(<fun>) 133 2020 y(val) p 235 -2020 a(f2) p 312 2020 a(:) p 363 2020 a([<) p 440 2020 -a(a]) p 517 2020 a(->) p 594 2020 a(unit) p 722 2020 -a(=) p 773 2020 a(<fun>) 133 2080 y(val) p 235 2080 a(f3) p -312 2080 a(:) p 363 2080 a([<) p 440 2080 a(a) p 491 -2080 a(b\(bool\)]) p 722 2080 a(->) p 799 2080 a(unit) p -927 2080 a(=) p 978 2080 a(<fun>) 133 2140 y(#) p 184 -2140 a(fun) p 286 2140 a(x) p 338 2140 a(->) p 414 2140 -a(f1) p 491 2140 a(x;) p 568 2140 a(f2) p 645 2140 a(x;) p -722 2140 a(f3) p 799 2140 a(x;;) 133 2200 y(-) p 184 -2200 a(:) p 235 2200 a([<) p 312 2200 a(a]) p 389 2200 -a(->) p 466 2200 a(unit) p 594 2200 a(=) p 645 2200 a(<fun>) 133 -2260 y(#) p 184 2260 a(fun) p 286 2260 a(x) p 338 2260 -a(->) p 414 2260 a(f1) p 491 2260 a(x;) p 568 2260 a(f3) p -645 2260 a(x;;) 133 2321 y(Character) o(s) p 414 2321 -a(18-19:) 133 2381 y(This) p 261 2381 a(expressio) o(n) p -543 2381 a(has) p 645 2381 a(type) p 773 2381 a([<) p -850 2381 a(a) p 902 2381 a(b\(int\)]) p 1107 2381 a(but) p -1209 2381 a(is) p 1286 2381 a(here) p 1414 2381 a(used) p -1542 2381 a(with) p 1670 2381 a(type) 184 2441 y([<) p -261 2441 a(a) p 312 2441 a(b\(bool\)]) p Fk 84 2555 a(Here) p -204 2555 a(the) p 292 2555 a(constrain) o(t) p 526 2555 -a(in) o(tro) q(duced) p 775 2555 a(b) o(y) p Fe 848 2555 -a(f2) p Fk 920 2555 a(hides) p 1049 2555 a(the) p 1138 -2555 a(constructor) p Fe 1401 2555 a(b) p Fk(,) p 1462 -2555 a(and) p 1562 2555 a(a) o(v) o(oids) p 1714 2555 -a(a) p 1760 2555 a(clash) 11 2615 y(b) q(et) o(w) o(een) p -Fe 199 2615 a(int) p Fk 292 2615 a(and) p Fe 387 2615 -a(bool) p Fk(.) 84 2676 y(An) p 163 2676 a(easy) p 270 -2676 a(w) o(a) o(y) p 369 2676 a(to) p 428 2676 a(solv) o(e) p -547 2676 a(this) p 642 2676 a(w) o(ould) p 784 2676 a(b) q(e) p -850 2676 a(to) p 909 2676 a(restrict) p 1077 2676 a(hiding) p -1226 2676 a(absen) o(t) p 1379 2676 a(lab) q(els) p 1515 -2676 a(to) p 1575 2676 a(generic) p 1739 2676 a(t) o(yp) q(es.) 11 -2736 y(This) p 124 2736 a(w) o(a) o(y) p 224 2736 a(the) p -310 2736 a(second) p 469 2736 a(case) p 574 2736 a(w) o(ould) p -718 2736 a(still) p 814 2736 a(fail,) p 913 2736 a(since) p -Fe 1034 2736 a(x) p Fk 1077 2736 a(has) p 1166 2736 a(a) p -1208 2736 a(monorphic) p 1451 2736 a(t) o(yp) q(e.) p -1584 2736 a(This) p 1697 2736 a(solution) 11 2796 y(w) o(ould) p -153 2796 a(b) q(e) p 219 2796 a(correct) p 382 2796 a(and) p -477 2796 a(principal.) 926 2937 y(2) p eop -PStoPSsaved restore -%%Page: (2,3) 2 -userdict/PStoPSsaved save put -PStoPSmatrix setmatrix -595.000000 0.271378 translate -90 rotate -0.706651 dup scale -userdict/PStoPSmatrix matrix currentmatrix put -userdict/PStoPSclip{0 0 moveto - 595.000000 0 rlineto 0 842.000000 rlineto -595.000000 0 rlineto - closepath}put initclip -/showpage{}def/copypage{}def/erasepage{}def -PStoPSxform concat -3 2 bop Fk 84 168 a(Ho) o(w) o(ev) o(er,) p 293 168 a(one) p -382 168 a(can) p 472 168 a(easily) p 606 168 a(see) p -684 168 a(that) p 789 168 a(this) p 884 168 a(solution) p -1068 168 a(is) p 1117 168 a(coun) o(ter-in) o(tuitiv) o(e.) p -1504 168 a(F) l(or) p 1591 168 a(the) p 1675 168 a(user,) p -Fe 1791 168 a(b) p Fk 1833 168 a(is) 11 229 y(already) p -183 229 a(an) p 250 229 a(imp) q(ossible) p 488 229 a(constructor,) p -759 229 a(and) p 854 229 a(ha) o(ving) p 1011 229 a(a) p -1052 229 a(clash) p 1174 229 a(on) p 1242 229 a(it) p -1291 229 a(is) p 1340 229 a(hard) p 1453 229 a(to) p -1513 229 a(understand.) 84 289 y(Another) p 277 289 a(solution) p -463 289 a(is) p 514 289 a(to) p 575 289 a(go) p 642 289 -a(the) p 728 289 a(opp) q(osite) p 924 289 a(w) o(a) o(y) l(.) p -1044 289 a(T) l(o) p 1117 289 a(accept) p 1271 289 a(more) p -1395 289 a(programs.) p 1634 289 a(This) p 1747 289 a(is) p -1798 289 a(the) 11 349 y(w) o(a) o(y) p 109 349 a(w) o(e) p -181 349 a(explore) p 351 349 a(here,) p 470 349 a(with) p -581 349 a(an) p 649 349 a(unc) o(hanged) p 891 349 a(syn) o(tax.) p -Fi 11 479 a(T) n(yping) p Fk 11 571 a(The) p 114 571 -a(idea) p 220 571 a(is) p 273 571 a(to) p 336 571 a(dela) o(y) p -466 571 a(uni\014cation) p 711 571 a(on) p 782 571 a(constructor) p -1043 571 a(un) o(til) p 1161 571 a(they) p 1274 571 a(are) p -1359 571 a(explicitely) p 1595 571 a(kno) o(wn) p 1753 -571 a(to) p 1816 571 a(b) q(e) 11 631 y(presen) o(t.) p -199 631 a(W) l(e) p 280 631 a(k) o(eep) p 390 631 a(the) p -472 631 a(\() p Fg(T) t(;) p 546 631 a(U;) p 601 631 -a(L) p Fk(\)) p 666 631 a(represen) o(tation) p 983 631 -a(of) p 1036 631 a(v) m(arian) o(t) p 1200 631 a(t) o(yp) q(es,) p -1341 631 a(but) p Fg 1428 631 a(T) p Fk 1478 631 a(is) p -1525 631 a(no) p 1591 631 a(longer) p 1735 631 a(a) p -1774 631 a(map) 11 692 y(from) p 126 692 a(constructors) p -403 692 a(to) p 462 692 a(t) o(yp) q(es,) p 605 692 a(but) p -694 692 a(from) p 809 692 a(constructors) p 1086 692 -a(to) p 1146 692 a(sets) p 1241 692 a(of) p 1297 692 -a(t) o(yp) q(es.) 84 752 y(When) p 230 752 a(w) o(e) p -307 752 a(unify) p 436 752 a(t) o(w) o(o) p 532 752 a(v) m(arian) o(t) p -702 752 a(t) o(yp) q(es,) p 850 752 a(the) p 938 752 -a(\014rst) p 1043 752 a(step) p 1150 752 a(is) p 1204 -752 a(just) p 1305 752 a(to) p 1369 752 a(tak) o(e) p -1479 752 a(the) p 1567 752 a(union) p 1707 752 a(of) p -1767 752 a(b) q(oth) 11 812 y(t) o(yping) p 162 812 a(en) o(vironmen) o -(ts,) p 476 812 a(dropping) p 682 812 a(unnecessary) p -952 812 a(t) o(yp) q(es.) 204 932 y(\() p Fg(T) p Ff -252 939 a(1) p Fg 272 932 a(;) p 294 932 a(U) p Ff 327 -939 a(1) p Fg 346 932 a(;) p 368 932 a(L) p Ff 401 939 -a(1) p Fk 421 932 a(\)) p Fj 451 932 a(^) p Fk 495 932 -a(\() p Fg(T) p Ff 543 939 a(2) p Fg 563 932 a(;) p 585 -932 a(U) p Ff 618 939 a(2) p Fg 637 932 a(;) p 659 932 -a(L) p Ff 692 939 a(2) p Fk 712 932 a(\)) p 745 932 a(=) p -797 932 a(\(\() p Fg(T) p Ff 864 939 a(1) p Fj 883 932 -a(j) p Fb 897 939 a(U) p Fa 921 944 a(1) p Fd 938 939 -a(\\) p Fb(U) p Fa 986 944 a(2) p Fk 1005 932 a(\)) p -Fj 1035 932 a([) p Fk 1079 932 a(\() p Fg(T) p Ff 1127 -939 a(2) p Fj 1146 932 a(j) p Fb 1160 939 a(U) p Fa 1184 -944 a(1) p Fd 1201 939 a(\\) p Fb(U) p Fa 1249 944 a(2) p -Fk 1268 932 a(\)) p Fg(;) p 1309 932 a(U) p Ff 1342 939 -a(1) p Fj 1373 932 a(\\) p Fg 1417 932 a(U) p Ff 1450 -939 a(2) p Fg 1470 932 a(;) p 1492 932 a(L) p Ff 1525 -939 a(1) p Fj 1556 932 a([) p Fg 1600 932 a(L) p Ff 1633 -939 a(2) p Fk 1653 932 a(\)) 84 1042 y(Here) p 203 1042 -a(the) p 291 1042 a(union) p 431 1042 a(of) p 490 1042 -a(t) o(w) o(o) p 587 1042 a(t) o(yping) p 742 1042 a(en) o(vironmen) o -(ts) p 1046 1042 a(is) p 1099 1042 a(the) p 1187 1042 -a(p) q(oin) o(t) o(wise) p 1407 1042 a(union) p 1547 -1042 a(of) p 1606 1042 a(their) p 1727 1042 a(sets) p -1826 1042 a(of) 11 1102 y(t) o(yp) q(es) p 140 1102 a(for) p -214 1102 a(eac) o(h) p 324 1102 a(constructor.) 84 1162 -y(This) p 195 1162 a(\014rst) p 296 1162 a(step) p 399 -1162 a(nev) o(er) p 529 1162 a(fails.) 84 1222 y(In) p -145 1222 a(a) p 186 1222 a(second) p 343 1222 a(step,) p -460 1222 a(structural) p 685 1222 a(constrain) o(ts) p -934 1222 a(are) p 1015 1222 a(enforced) p 1209 1222 a(on) p -1277 1222 a(the) p 1361 1222 a(resulting) p 1562 1222 -a(t) o(yp) q(e) p 1672 1222 a(\() p Fg(T) t(;) p 1746 -1222 a(U;) p 1801 1222 a(L) p Fk(\).) 11 1282 y(First,) p -Fg 144 1282 a(L) p Fk 195 1282 a(should) p 351 1282 a(b) q(e) p -418 1282 a(included) p 614 1282 a(in) p Fg 672 1282 a(U) p -Fk 710 1282 a(.) p 749 1282 a(Then,) p 892 1282 a(for) p -967 1282 a(all) p 1036 1282 a(constructors) p 1314 1282 -a(app) q(earing) p 1542 1282 a(in) p Fg 1600 1282 a(L) p -Fk(,) p 1664 1282 a(the) p 1749 1282 a(set) p 1826 1282 -a(of) 11 1343 y(t) o(yp) q(es) p 136 1343 a(asso) q(ciated) p -365 1343 a(with) p 472 1343 a(eac) o(h) p 578 1343 a(constructor) p -833 1343 a(is) p 878 1343 a(collapsed) p 1084 1343 a(b) o(y) p -1148 1343 a(uni\014cation.) p 1407 1343 a(This) p 1515 -1343 a(can) p 1600 1343 a(b) q(e) p 1663 1343 a(expressed) 11 -1403 y(b) o(y) p 78 1403 a(rewriting) p 287 1403 a(rules,) p -417 1403 a(where) p Fg 558 1403 a(e) p Fk 597 1403 a(is) p -646 1403 a(a) p 687 1403 a(m) o(ulti-equation) p 1015 -1403 a(and) p Fg 1109 1403 a(\036) p Fk 1155 1403 a(a) p -1195 1403 a(set) p 1271 1403 a(of) p 1327 1403 a(m) o(ultiequations) 249 -1509 y(if) p Fg 294 1509 a(L) p Fj 341 1509 a(6\032) p -Fg 393 1509 a(U) p Fk 448 1509 a(then) p 559 1509 a(\() p -Fg(T) t(;) p 633 1509 a(U;) p 688 1509 a(L) p Fk(\)) p -753 1509 a(=) p Fg 805 1509 a(e) p Fj 839 1509 a(^) p -Fg 883 1509 a(\036) p Fj 926 1509 a(\000) p 956 1509 -a(!) p 1020 1509 a(?) p Fk 249 1629 a(if) p Fg 294 1629 -a(l) p Fj 323 1629 a(2) p Fg 370 1629 a(L) p Fk 420 1629 -a(and) p Fg 515 1629 a(T) p Fk 551 1629 a(\() p Fg(l) p -Fk 586 1629 a(\)) p 617 1629 a(=) p Fj 669 1629 a(f) p -Fg(\034) p Ff 715 1636 a(1) p Fg 735 1629 a(;) p 757 -1629 a(:) p 779 1629 a(:) p 801 1629 a(:) p 822 1629 -a(;) p 844 1629 a(\034) p Fb 865 1636 a(n) p Fj 889 1629 -a(g) p Fk 930 1629 a(then) 298 1689 y(\() p Fg(T) t(;) p -372 1689 a(U;) p 427 1689 a(L) p Fk(\)) p 492 1689 a(=) p -Fg 544 1689 a(e) p Fj 577 1689 a(^) p Fg 622 1689 a(\036) p -Fj 664 1689 a(\000) p 695 1689 a(!) p Fk 759 1689 a(\() p -Fg(T) p Fj 814 1689 a(f) p Fg(l) p Fj 867 1689 a(7!) p -Fg 931 1689 a(\034) p Ff 952 1696 a(1) p Fj 972 1689 -a(g) p Fg(;) p 1019 1689 a(U;) p 1074 1689 a(L) p Fk(\)) p -1139 1689 a(=) p Fg 1191 1689 a(e) p Fj 1225 1689 a(^) p -Fg 1269 1689 a(\034) p Ff 1290 1696 a(1) p Fk 1324 1689 -a(=) p Fg 1376 1689 a(:) p 1398 1689 a(:) p 1420 1689 -a(:) p Fk 1447 1689 a(=) p Fg 1498 1689 a(\034) p Fb -1519 1696 a(n) p Fj 1554 1689 a(^) p Fg 1598 1689 a(\036) p -Fk 84 1796 a(Optionally) p 331 1796 a(one) p 425 1796 -a(can) p 519 1796 a(add) p 619 1796 a(rules) p 740 1796 -a(that) p 850 1796 a(remo) o(v) o(e) p 1022 1796 a(a) p -1067 1796 a(constructor) p Fg 1329 1796 a(l) p Fk 1366 -1796 a(from) p Fg 1486 1796 a(U) p Fk 1545 1796 a(if) p -1594 1796 a(the) p 1683 1796 a(equation) 11 1856 y(obtained) p -211 1856 a(from) p Fg 326 1856 a(T) p Fk 362 1856 a(\() p -Fg(l) p Fk 397 1856 a(\)) p 431 1856 a(has) p 518 1856 -a(no) p 586 1856 a(solution.) p 790 1856 a(Suc) o(h) p -908 1856 a(rules) p 1024 1856 a(w) o(ould) p 1167 1856 -a(b) q(e) p 1233 1856 a(sound) p 1374 1856 a(and) p 1469 -1856 a(complete.) p Fi 11 1986 a(Syn) n(tax) p 198 1986 -a(of) p 262 1986 a(t) n(yp) r(es) p Fk 11 2078 a(Thanks) p -188 2078 a(to) p 250 2078 a(the) p 336 2078 a(go) q(o) q(d) p -458 2078 a(prop) q(erties) p 689 2078 a(of) p 747 2078 -a(these) p 874 2078 a(constrain) o(ts,) p 1139 2078 a(the) p -1226 2078 a(surface) p 1392 2078 a(syn) o(tax) p 1551 -2078 a(of) p 1608 2078 a(t) o(yp) q(es) p 1740 2078 a(w) o(ould) 11 -2138 y(only) p 118 2138 a(ha) o(v) o(e) p 230 2138 a(to) p -290 2138 a(b) q(e) p 356 2138 a(sligh) o(tly) p 527 2138 -a(extended.) p Fh 590 2244 a(tag-typ) n(e) p Fk 798 2244 -a(::=) p Fh 904 2244 a(ident) p Fj 849 2304 a(j) p Fh -904 2304 a(ident) p Fe 1031 2304 a(\() p Fh(typ) n(expr-list) p -Fe(\)) p Fh 523 2365 a(typ) n(expr-list) p Fk 798 2365 -a(::=) p Fh 904 2365 a(typ) n(expr) p Fj 849 2425 a(j) p -Fh 904 2425 a(typ) n(expr) p Fe 1078 2425 a(&) p Fh 1120 -2425 a(typ) n(expr-list) p Fk 84 2531 a(Notice) p 234 -2531 a(that) p 336 2531 a(a) p 373 2531 a(0-ary) p 496 -2531 a(constructor) p 751 2531 a(and) p 842 2531 a(an) p -907 2531 a(1-ary) p 1030 2531 a(construtor) p 1262 2531 -a(are) p 1340 2531 a(con) o(tradictory) l(,) p 1648 2531 -a(and) p 1740 2531 a(w) o(ould) 11 2592 y(result) p 146 -2592 a(in) p 203 2592 a(the) p 287 2592 a(absence) p -466 2592 a(of) p 522 2592 a(this) p 617 2592 a(constructor.) 926 -2937 y(3) p eop -PStoPSsaved restore -userdict/PStoPSsaved save put -PStoPSmatrix setmatrix -595.000000 421.271378 translate -90 rotate -0.706651 dup scale -userdict/PStoPSmatrix matrix currentmatrix put -userdict/PStoPSclip{0 0 moveto - 595.000000 0 rlineto 0 842.000000 rlineto -595.000000 0 rlineto - closepath}put initclip -PStoPSxform concat -4 3 bop Fi 11 168 a(Discussion) p Fk 11 261 a(Suc) o(h) p -133 261 a(a) p 179 261 a(c) o(hange) p 345 261 a(has) p -436 261 a(the) p 525 261 a(ma) s(jor) p 672 261 a(adv) m(an) o(tage) p -907 261 a(of) p 967 261 a(b) q(oth) p 1087 261 a(reco) o(v) o(ering) p -1324 261 a(principalit) o(y) p 1589 261 a(and) p 1688 -261 a(a) o(v) o(oiding) 11 321 y(unin) o(tuitiv) o(e) p -266 321 a(error) p 392 321 a(messages.) p 640 321 a(Constrain) o(ts) p -909 321 a(created) p 1087 321 a(in) p 1152 321 a(suc) o(h) p -1269 321 a(a) p 1317 321 a(w) o(a) o(y) p 1423 321 a(are) p -1512 321 a(v) o(ery) p 1626 321 a(ligh) o(t:) p 1772 -321 a(they) 11 381 y(alw) o(a) o(ys) p 165 381 a(app) q(ear) p -325 381 a(inside) p 463 381 a(a) p 502 381 a(v) m(arian) o(t) p -666 381 a(t) o(yp) q(e,) p 788 381 a(and) p 882 381 a(if) p -926 381 a(the) p 1008 381 a(v) m(arian) o(t) p 1172 381 -a(t) o(yp) q(e) p 1281 381 a(do) q(es) p 1390 381 a(not) p -1475 381 a(app) q(ear) p 1635 381 a(in) p 1691 381 a(the) p -1774 381 a(\014nal) 11 441 y(t) o(yp) q(e) p 120 441 -a(sc) o(heme,) p 301 441 a(then) p 412 441 a(the) p 496 -441 a(constrain) o(t) p 725 441 a(can) p 815 441 a(b) q(e) p -881 441 a(discarded) p 1098 441 a(safely) l(.) 84 501 -y(On) p 165 501 a(the) p 249 501 a(other) p 376 501 a(hand,) p -512 501 a(there) p 637 501 a(are) p 718 501 a(t) o(w) o(o) p -810 501 a(dra) o(wbac) o(ks.) p Fj 83 616 a(\017) p Fk -133 616 a(Some) p 259 616 a(errors) p 393 616 a(will) p -482 616 a(b) q(e) p 544 616 a(dela) o(y) o(ed) p 715 -616 a(longer) p 858 616 a(than) p 968 616 a(no) o(w,) p -1080 616 a(un) o(til) p 1191 616 a(a) p 1228 616 a(construtor) p -1460 616 a(is) p 1505 616 a(actually) p 1687 616 a(included) 133 -676 y(in) p Fg 189 676 a(L) p Fk(.) p 258 676 a(It) p -311 676 a(is) p 360 676 a(not) p 446 676 a(clear) p 563 -676 a(ho) o(w) p 665 676 a(damageable) p 930 676 a(it) p -979 676 a(is.) p Fj 83 777 a(\017) p Fk 133 777 a(While) p -272 777 a(t) o(yp) q(e) p 378 777 a(inference) p 579 -777 a(is) p 625 777 a(simple) p 774 777 a(and) p 865 -777 a(costless) p 1036 777 a(for) p 1108 777 a(this) p -1200 777 a(extension,) p 1426 777 a(simpli\014cation) p -1724 777 a(of) p 1776 777 a(con-) 133 838 y(strain) o(ts) p -310 838 a(|marking) p 551 838 a(constructors) p 830 838 -a(with) p 943 838 a(unsolv) m(able) p 1182 838 a(constrain) o(ts) p -1432 838 a(as) p 1494 838 a(absen) o(t,) p 1663 838 a(and) p -1760 838 a(elim-) 133 898 y(inating) p 300 898 a(redundan) o(t) p -536 898 a(t) o(yp) q(es) p 667 898 a(in) p 726 898 a(constrain) o(ts|) p -1025 898 a(is) p 1076 898 a(a) p 1119 898 a(bit) p 1197 -898 a(more) p 1320 898 a(exp) q(ensiv) o(e.) p 1565 898 -a(Also,) p 1691 898 a(allo) o(wing) 133 958 y(suc) o(h) p -244 958 a(constrained) p 506 958 a(t) o(yp) q(es) p 637 -958 a(inside) p 777 958 a(signatures) p 1010 958 a(w) o(ould) p -1154 958 a(mean) p 1286 958 a(ha) o(ving) p 1444 958 -a(to) p 1506 958 a(solv) o(e) p 1627 958 a(a) p 1669 -958 a(matc) o(hing) 133 1018 y(problem,) p 333 1018 a(whic) o(h) p -469 1018 a(is) p 514 1018 a(exp) q(onen) o(tial) p 772 -1018 a(in) p 825 1018 a(the) p 906 1018 a(n) o(um) o(b) q(er) p -1080 1018 a(of) p 1132 1018 a(connected) p 1356 1018 -a(constrain) o(ts) p 1600 1018 a(inside) p 1735 1018 -a(a) p 1772 1018 a(t) o(yp) q(e) 133 1078 y(sc) o(heme.) 84 -1193 y(Reasonably) p 340 1193 a(e\016cien) o(t) p 516 -1193 a(algorithms) p 754 1193 a(exist) p 866 1193 a(to) p -922 1193 a(solv) o(e) p 1038 1193 a(these) p 1159 1193 -a(problems,) p 1379 1193 a(so) p 1435 1193 a(the) p 1515 -1193 a(di\016cult) o(y) p 1715 1193 a(is) p 1760 1193 -a(more) 11 1253 y(in) p 67 1253 a(the) p 151 1253 a(increased) p -363 1253 a(complexit) o(y) p 611 1253 a(of) p 667 1253 -a(the) p 751 1253 a(t) o(yp) q(e-c) o(hec) o(k) o(er) p -1031 1253 a(than) p 1145 1253 a(in) p 1202 1253 a(run-time) p -1402 1253 a(cost.) p Fl 11 1397 a(Other) p 205 1397 a(features) p -Fk 11 1490 a(Ob) s(jectiv) o(e) p 238 1490 a(Lab) q(el) p -380 1490 a(con) o(tains) p 579 1490 a(t) o(w) o(o) p -678 1490 a(other) p 812 1490 a(features:) p 1029 1490 -a(p) q(olymorphic) p 1318 1490 a(metho) q(ds) p 1521 -1490 a(and) p 1623 1490 a(t) o(yp) q(e-driv) o(en) 11 -1550 y(access) p 153 1550 a(of) p 208 1550 a(records.) p -394 1550 a(Both) p 514 1550 a(of) p 568 1550 a(them) p -692 1550 a(use) p 775 1550 a(the) p 857 1550 a(same) p -978 1550 a(metho) q(d) p 1154 1550 a(of) p 1209 1550 -a(enforcing) p 1417 1550 a(principalit) o(y) p 1676 1550 -a(of) p 1730 1550 a(t) o(yping) 11 1610 y(through) p -191 1610 a(tracing) p 351 1610 a(user) p 450 1610 a(pro) o(vided) p -647 1610 a(t) o(yp) q(e) p 752 1610 a(information.) p -1034 1610 a(With) p 1155 1610 a(this) p 1246 1610 a(tracing,) p -1422 1610 a(their) p 1534 1610 a(implem) o(en) n(tation) 11 -1670 y(is) p 60 1670 a(v) o(ery) p 167 1670 a(easy) l(,) p -283 1670 a(but) p 373 1670 a(without) p 554 1670 a(it) p -603 1670 a(they) p 713 1670 a(lo) q(ose) p 834 1670 a(principalit) o(y) -l(.) 84 1730 y(While) p 229 1730 a(these) p 357 1730 -a(features) p 543 1730 a(pro) o(vide) p 720 1730 a(some) p -845 1730 a(comfort) p 1029 1730 a(in) p 1089 1730 a(writing) p -1260 1730 a(user) p 1366 1730 a(programs,) p 1598 1730 -a(they) p 1711 1730 a(are) p 1795 1730 a(not) 11 1791 -y(strictly) p 182 1791 a(necessary) p 403 1791 a(for) p -482 1791 a(the) p 571 1791 a(v) m(arious) p 742 1791 -a(libraries) p 934 1791 a(coming) p 1107 1791 a(with) p -1223 1791 a(O'Labl) p 1391 1791 a(\(LablTk,) p 1602 1791 -a(LablGL) p 1787 1791 a(and) 11 1851 y(LablGTK\).) 926 -2937 y(4) p eop -PStoPSsaved restore -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/testlabl/poly.exp b/testlabl/poly.exp deleted file mode 100644 index 8df92e4445..0000000000 --- a/testlabl/poly.exp +++ /dev/null @@ -1,332 +0,0 @@ - Objective Caml version 3.07+4 (2003-11-07) - -# * * * # type 'a t = { t : 'a; } -# type 'a fold = { fold : 'b. f:('b -> 'a -> 'b) -> init:'b -> 'b; } -# val f : 'a list -> 'a fold = <fun> -# - : int = 6 -# class ['a] ilist : - 'a list -> - object ('b) - val l : 'a list - method add : 'a -> 'b - method fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - end -# class virtual ['a] vlist : - object ('b) - method virtual add : 'a -> 'b - method virtual fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - end -# class ilist2 : - int list -> - object ('a) - val l : int list - method add : int -> 'a - method fold : f:('b -> int -> 'b) -> init:'b -> 'b - end -# val ilist2 : 'a list -> 'a vlist = <fun> -# class ['a] ilist3 : - 'a list -> - object ('b) - val l : 'a list - method add : 'a -> 'b - method fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - end -# class ['a] ilist4 : - 'a list -> - object ('b) - val l : 'a list - method add : 'a -> 'b - method fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - end -# class ['a] ilist5 : - 'a list -> - object ('b) - val l : 'a list - method add : 'a -> 'b - method fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - method fold2 : f:('d -> 'a -> 'd) -> init:'d -> 'd - end -# class ['a] ilist6 : - 'a list -> - object ('b) - val l : 'a list - method add : 'a -> 'b - method fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - method fold2 : f:('d -> 'a -> 'd) -> init:'d -> 'd - end -# class virtual ['a] olist : - object method virtual fold : f:('a -> 'b -> 'b) -> init:'b -> 'b end -# class ['a] onil : - object method fold : f:('a -> 'b -> 'b) -> init:'b -> 'b end -# class ['a] ocons : - hd:'a -> - tl:'a olist -> - object - val hd : 'a - val tl : 'a olist - method fold : f:('a -> 'b -> 'b) -> init:'b -> 'b - end -# class ['a] ostream : - hd:'a -> - tl:'a ostream -> - object - val hd : 'a - val tl : 'a ostream - method empty : bool - method fold : f:('a -> 'b -> 'b) -> init:'b -> 'b - end -# class ['a] ostream1 : - hd:'a -> - tl:'b -> - object ('b) - val hd : 'a - val tl : 'b - method fold : f:('a -> 'c -> 'c) -> init:'c -> 'c - method hd : 'a - method tl : 'b - end -# class vari : object method m : [< `A | `B | `C ] -> int end -# class vari : object method m : [< `A | `B | `C ] -> int end -# module V : sig type v = [ `A | `B | `C ] val m : [< v ] -> int end -# class varj : object method m : [< V.v ] -> int end -# module type T = - sig class vari : object method m : [< `A | `B | `C ] -> int end end -# module M0 : - sig class vari : object method m : [< `A | `B | `C ] -> int end end -# module M : T -# val v : M.vari = <obj> -# - : int = 1 -# class point : - x:int -> - y:int -> object val x : int val y : int method x : int method y : int end -# class color_point : - x:int -> - y:int -> - color:string -> - object - val color : string - val x : int - val y : int - method color : string - method x : int - method y : int - end -# class circle : - #point -> - r:int -> - object val p : point val r : int method distance : #point -> float end -# val p0 : point = <obj> -val p1 : point = <obj> -val cp : color_point = <obj> -val c : circle = <obj> -val d : float = 11.4536240470737098 -# val f : < m : 'a. 'a -> 'a > -> < m : 'a. 'a -> 'a > = <fun> -# Characters 41-42: -This expression has type < m : 'a. 'a -> 'a list > but is here used with type - < m : 'a. 'a -> 'b > -The universal variable 'a would escape its scope -# class id : object method id : 'a -> 'a end -# class type id_spec = object method id : 'a -> 'a end -# class id_impl : object method id : 'a -> 'a end -# class a : object method m : bool end -class b : object method id : 'a -> 'a end -# Characters 72-77: -This method has type 'a -> 'a which is less general than 'b. 'b -> 'a -# Characters 75-80: -This method has type 'a -> 'a which is less general than 'b. 'b -> 'a -# Characters 80-85: -This method has type 'a -> 'a which is less general than 'b. 'b -> 'b -# Characters 92-159: -This method has type 'a -> 'a which is less general than 'b. 'b -> 'b -# class c : object method m : 'a -> 'b -> 'a end -# val f1 : id -> int * bool = <fun> -# val f2 : id -> int * bool = <fun> -# Characters 24-28: -This expression has type bool but is here used with type int -# val f4 : id -> int * bool = <fun> -# class c : object method m : #id -> int * bool end -# class id2 : object method id : 'a -> 'a method mono : int -> int end -# val app : int * bool = (1, true) -# Characters 4-25: -The type abbreviation foo is cyclic -# class ['a] bar : 'a -> object end -# type 'a foo = 'a foo bar -# - : (< m : 'b. 'b * 'a > as 'a) -> 'c * 'a = <fun> -# - : (< m : 'b. 'a * 'b list > as 'a) -> 'a * 'c list = <fun> -# val f : - (< m : 'b. 'a * (< n : 'b; .. > as 'b) > as 'a) -> - 'a * (< n : 'c; .. > as 'c) = <fun> -# - : (< p : 'b. < m : 'b; n : 'a; .. > as 'b > as 'a) -> - (< m : 'c; n : 'a; .. > as 'c) -= <fun> -# type sum = T of < id : 'a. 'a -> 'a > -# - : sum -> 'a -> 'a = <fun> -# type record = { r : < id : 'a. 'a -> 'a >; } -# - : record -> 'a -> 'a = <fun> -# - : record -> 'a -> 'a = <fun> -# class myself : object ('a) method self : 'b -> 'a end -# class number : - object ('a) - val num : int - method num : int - method prev : 'a - method succ : 'a - method switch : zero:(unit -> 'b) -> prev:('a -> 'b) -> 'b - end -# val id : 'a -> 'a = <fun> -# class c : object method id : 'a -> 'a end -# class c' : object method id : 'a -> 'a end -# class d : - object - val mutable count : int - method count : int - method id : 'a -> 'a - method old : 'b -> 'b - end -# class ['a] olist : - 'a list -> - object ('b) - val l : 'a list - method cons : 'a -> 'b - method fold : f:('a -> 'c -> 'c) -> init:'c -> 'c - end -# val sum : int #olist -> int = <fun> -# val count : 'a #olist -> int = <fun> -# val append : 'a #olist -> ('a #olist as 'b) -> 'b = <fun> -# type 'a t = unit -# class o : object method x : [> `A ] t -> unit end -# class c : object method m : d end -class d : ?x:int -> unit -> object end -# class d : ?x:int -> unit -> object end -class c : object method m : d end -# class type numeral = object method fold : ('a -> 'a) -> 'a -> 'a end -class zero : object method fold : ('a -> 'a) -> 'a -> 'a end -class next : #numeral -> object method fold : ('a -> 'a) -> 'a -> 'a end -# class type node_type = object method as_variant : [> `Node of node_type ] end -# class node : node_type -# class node : object method as_variant : [> `Node of node_type ] end -# type bad = { bad : 'a. 'a option ref; } -# Characters 17-25: -This field value has type 'a option ref which is less general than - 'b. 'b option ref -# type bad2 = { mutable bad2 : 'a. 'a option ref option; } -# val bad2 : bad2 = {bad2 = None} -# Characters 13-28: -This field value has type 'a option ref option which is less general than - 'b. 'b option ref option -# type 'a t = [ `A of 'a ] -# class c : object method m : ([> 'a t ] as 'a) -> unit end -# class c : object method m : ([> 'a t ] as 'a) -> unit end -# class c : object method m : ([> 'a t ] as 'a) -> 'a end -# class c : object method m : ([> `A ] as 'a) option -> 'a end -# Characters 145-166: -This type scheme cannot quantify 'a : -it escapes this scope. -# type ('a, 'b) list_visitor = < caseCons : 'b -> 'b list -> 'a; caseNil : 'a > -type 'a alist = < visit : 'b. ('b, 'a) list_visitor -> 'b > -class type ct = object ('a) method fold : ('b -> 'a -> 'b) -> 'b -> 'b end -type t = { f : 'a 'b. ('b -> (#ct as 'a) -> 'b) -> 'b; } -# Characters 19-25: -The type abbreviation t is cyclic -# class ['a] a : object constraint 'a = [> `A of 'a a ] end -type t = [ `A of t a ] -# Characters 71-80: -Constraints are not satisfied in this type. -Type ('a, 'b) t should be an instance of ('c, 'c) t -# type 'a t = 'a -type u = int t -# type 'a t constraint 'a = int -# Characters 26-32: -Constraints are not satisfied in this type. -Type 'a u t should be an instance of int t -# type 'a u = 'a constraint 'a = int -type 'a v = 'a u t constraint 'a = int -# type g = int -# type 'a t = unit constraint 'a = g -# Characters 26-32: -Constraints are not satisfied in this type. -Type 'a u t should be an instance of g t -# type 'a u = 'a constraint 'a = g -type 'a v = 'a u t constraint 'a = int -# Characters 38-58: -In the definition of v, type 'a list u should be 'a u -# type 'a t = 'a -type 'a u = A of 'a t -# type 'a t = < a : 'a > -# - : ('a t as 'a) -> 'a t = <fun> -# type u = 'a t as 'a -# type t = A | B -# - : [> `A ] * t -> int = <fun> -# - : [> `A ] * t -> int = <fun> -# - : [> `A ] option * t -> int = <fun> -# - : [> `A ] option * t -> int = <fun> -# - : t * [< `A | `B ] -> int = <fun> -# - : [< `A | `B ] * t -> int = <fun> -# Characters 0-41: -Warning: this pattern-matching is not exhaustive. -Here is an example of a value that is not matched: -(`AnyExtraTag, `AnyExtraTag) -- : [> `A | `B ] * [> `A | `B ] -> int = <fun> -# Characters 0-29: -Warning: this pattern-matching is not exhaustive. -Here is an example of a value that is not matched: -(_, 0) -Characters 21-24: -Warning: this match case is unused. -- : [ `B ] * int -> int = <fun> -# Characters 0-29: -Warning: this pattern-matching is not exhaustive. -Here is an example of a value that is not matched: -(0, _) -Characters 21-24: -Warning: this match case is unused. -- : int * [ `B ] -> int = <fun> -# Characters 69-135: -Constraints are not satisfied in this type. -Type -([> `B of 'a ], 'a) b as 'a -should be an instance of -(('b, [> `A of 'b ] as 'c) a as 'b, 'c) b -# class type ['a, 'b] a = - object - constraint 'a = ('a, 'b) #a - constraint 'b = ('a, 'b) #b - method as_a : ('a, 'b) a - method b : 'b - end -class type ['a, 'b] b = - object - constraint 'a = ('a, 'b) #a - constraint 'b = ('a, 'b) #b - method a : 'a - method as_b : ('a, 'b) b - end -class type ['a] ca = - object ('b) - constraint 'a = ('b, 'a) #b - method as_a : ('b, 'a) a - method b : 'a - end -class type ['a] cb = - object ('b) - constraint 'a = ('a, 'b) #a - method a : 'a - method as_b : ('a, 'b) b - end -type bt = 'a ca cb as 'a -# class c : object method m : int end -# val f : unit -> c = <fun> -# val f : unit -> c = <fun> -# Characters 11-60: -Warning: the following private methods were made public implicitly: - n -val f : unit -> < m : int; n : int > = <fun> -# Characters 11-56: -This object is expected to have type c = < m : int > but has actually type - < m : int; n : 'a > -Only the second object type has a method n -# Characters 11-69: -This object is expected to have type < n : int > but has actually type - < m : 'a > -Only the first object type has a method n -# diff --git a/testlabl/poly.exp2 b/testlabl/poly.exp2 deleted file mode 100644 index 4d5a15d311..0000000000 --- a/testlabl/poly.exp2 +++ /dev/null @@ -1,339 +0,0 @@ - Objective Caml version 3.07+4 (2003-11-07) - -# * * * # type 'a t = { t : 'a; } -# type 'a fold = { fold : 'b. f:('b -> 'a -> 'b) -> init:'b -> 'b; } -# val f : 'a list -> 'a fold = <fun> -# - : int = 6 -# class ['a] ilist : - 'a list -> - object ('b) - val l : 'a list - method add : 'a -> 'b - method fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - end -# class virtual ['a] vlist : - object ('b) - method virtual add : 'a -> 'b - method virtual fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - end -# class ilist2 : - int list -> - object ('a) - val l : int list - method add : int -> 'a - method fold : f:('b -> int -> 'b) -> init:'b -> 'b - end -# val ilist2 : 'a list -> 'a vlist = <fun> -# class ['a] ilist3 : - 'a list -> - object ('b) - val l : 'a list - method add : 'a -> 'b - method fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - end -# class ['a] ilist4 : - 'a list -> - object ('b) - val l : 'a list - method add : 'a -> 'b - method fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - end -# class ['a] ilist5 : - 'a list -> - object ('b) - val l : 'a list - method add : 'a -> 'b - method fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - method fold2 : f:('d -> 'a -> 'd) -> init:'d -> 'd - end -# class ['a] ilist6 : - 'a list -> - object ('b) - val l : 'a list - method add : 'a -> 'b - method fold : f:('c -> 'a -> 'c) -> init:'c -> 'c - method fold2 : f:('d -> 'a -> 'd) -> init:'d -> 'd - end -# class virtual ['a] olist : - object method virtual fold : f:('a -> 'b -> 'b) -> init:'b -> 'b end -# class ['a] onil : - object method fold : f:('a -> 'b -> 'b) -> init:'b -> 'b end -# class ['a] ocons : - hd:'a -> - tl:'a olist -> - object - val hd : 'a - val tl : 'a olist - method fold : f:('a -> 'b -> 'b) -> init:'b -> 'b - end -# class ['a] ostream : - hd:'a -> - tl:'a ostream -> - object - val hd : 'a - val tl : < empty : bool; fold : 'b. f:('a -> 'b -> 'b) -> init:'b -> 'b > - method empty : bool - method fold : f:('a -> 'c -> 'c) -> init:'c -> 'c - end -# class ['a] ostream1 : - hd:'a -> - tl:'b -> - object ('b) - val hd : 'a - val tl : 'b - method fold : f:('a -> 'c -> 'c) -> init:'c -> 'c - method hd : 'a - method tl : 'b - end -# class vari : object method m : [< `A | `B | `C ] -> int end -# class vari : object method m : [< `A | `B | `C ] -> int end -# module V : sig type v = [ `A | `B | `C ] val m : [< v ] -> int end -# class varj : object method m : [< V.v ] -> int end -# module type T = - sig class vari : object method m : [< `A | `B | `C ] -> int end end -# module M0 : - sig class vari : object method m : [< `A | `B | `C ] -> int end end -# module M : T -# val v : M.vari = <obj> -# - : int = 1 -# class point : - x:int -> - y:int -> object val x : int val y : int method x : int method y : int end -# class color_point : - x:int -> - y:int -> - color:string -> - object - val color : string - val x : int - val y : int - method color : string - method x : int - method y : int - end -# class circle : - #point -> - r:int -> - object val p : point val r : int method distance : #point -> float end -# val p0 : point = <obj> -val p1 : point = <obj> -val cp : color_point = <obj> -val c : circle = <obj> -val d : float = 11.4536240470737098 -# val f : < m : 'a. 'a -> 'a > -> < m : 'b. 'b -> 'b > = <fun> -# Characters 41-42: -This expression has type < m : 'a. 'a -> 'a list > but is here used with type - < m : 'a. 'a -> 'b > -The universal variable 'a would escape its scope -# class id : object method id : 'a -> 'a end -# class type id_spec = object method id : 'a -> 'a end -# class id_impl : object method id : 'a -> 'a end -# class a : object method m : bool end -class b : object method id : 'a -> 'a end -# Characters 72-77: -This method has type 'a -> 'a which is less general than 'b. 'b -> 'a -# Characters 75-80: -This method has type 'a -> 'a which is less general than 'b. 'b -> 'a -# Characters 80-85: -This method has type 'a -> 'a which is less general than 'b. 'b -> 'b -# Characters 92-159: -This method has type 'a -> 'a which is less general than 'b. 'b -> 'b -# class c : object method m : 'a -> 'b -> 'a end -# val f1 : id -> int * bool = <fun> -# val f2 : id -> int * bool = <fun> -# Characters 24-28: -This expression has type bool but is here used with type int -# Characters 27-31: -Warning: This use of a polymorphic method is not principal -Characters 35-39: -Warning: This use of a polymorphic method is not principal -val f4 : id -> int * bool = <fun> -# class c : object method m : #id -> int * bool end -# class id2 : object method id : 'a -> 'a method mono : int -> int end -# val app : int * bool = (1, true) -# Characters 4-25: -The type abbreviation foo is cyclic -# class ['a] bar : 'a -> object end -# type 'a foo = 'a foo bar -# - : (< m : 'b. 'b * 'a > as 'a) -> 'c * (< m : 'e. 'e * 'd > as 'd) = <fun> -# - : (< m : 'b. 'a * 'b list > as 'a) -> - (< m : 'd. 'c * 'd list > as 'c) * 'e list -= <fun> -# val f : - (< m : 'b. 'a * (< n : 'b; .. > as 'b) > as 'a) -> - (< m : 'd. 'c * (< n : 'd; .. > as 'd) > as 'c) * (< n : 'e; .. > as 'e) = - <fun> -# - : (< p : 'b. < m : 'b; n : 'a; .. > as 'b > as 'a) -> - (< m : 'c; n : < p : 'e. < m : 'e; n : 'd; .. > as 'e > as 'd; .. > as 'c) -= <fun> -# type sum = T of < id : 'a. 'a -> 'a > -# - : sum -> 'a -> 'a = <fun> -# type record = { r : < id : 'a. 'a -> 'a >; } -# - : record -> 'a -> 'a = <fun> -# - : record -> 'a -> 'a = <fun> -# class myself : object ('a) method self : 'b -> 'a end -# class number : - object ('a) - val num : int - method num : int - method prev : 'a - method succ : 'a - method switch : zero:(unit -> 'b) -> prev:('a -> 'b) -> 'b - end -# val id : 'a -> 'a = <fun> -# class c : object method id : 'a -> 'a end -# class c' : object method id : 'a -> 'a end -# class d : - object - val mutable count : int - method count : int - method id : 'a -> 'a - method old : 'b -> 'b - end -# class ['a] olist : - 'a list -> - object ('b) - val l : 'a list - method cons : 'a -> 'b - method fold : f:('a -> 'c -> 'c) -> init:'c -> 'c - end -# val sum : int #olist -> int = <fun> -# val count : 'a #olist -> int = <fun> -# val append : 'a #olist -> ('a #olist as 'b) -> 'b = <fun> -# type 'a t = unit -# class o : object method x : [> `A ] t -> unit end -# class c : object method m : d end -class d : ?x:int -> unit -> object end -# class d : ?x:int -> unit -> object end -class c : object method m : d end -# class type numeral = object method fold : ('a -> 'a) -> 'a -> 'a end -class zero : object method fold : ('a -> 'a) -> 'a -> 'a end -class next : #numeral -> object method fold : ('a -> 'a) -> 'a -> 'a end -# class type node_type = object method as_variant : [> `Node of node_type ] end -# class node : node_type -# class node : object method as_variant : [> `Node of node_type ] end -# type bad = { bad : 'a. 'a option ref; } -# Characters 17-25: -This field value has type 'a option ref which is less general than - 'b. 'b option ref -# type bad2 = { mutable bad2 : 'a. 'a option ref option; } -# val bad2 : bad2 = {bad2 = None} -# Characters 13-28: -This field value has type 'a option ref option which is less general than - 'b. 'b option ref option -# type 'a t = [ `A of 'a ] -# class c : object method m : ([> 'a t ] as 'a) -> unit end -# class c : object method m : ([> 'a t ] as 'a) -> unit end -# class c : object method m : ([> 'a t ] as 'a) -> 'a end -# class c : object method m : ([> `A ] as 'a) option -> 'a end -# Characters 145-166: -This type scheme cannot quantify 'a : -it escapes this scope. -# type ('a, 'b) list_visitor = < caseCons : 'b -> 'b list -> 'a; caseNil : 'a > -type 'a alist = < visit : 'b. ('b, 'a) list_visitor -> 'b > -class type ct = object ('a) method fold : ('b -> 'a -> 'b) -> 'b -> 'b end -type t = { f : 'a 'b. ('b -> (#ct as 'a) -> 'b) -> 'b; } -# Characters 19-25: -The type abbreviation t is cyclic -# class ['a] a : object constraint 'a = [> `A of 'a a ] end -type t = [ `A of t a ] -# Characters 71-80: -Constraints are not satisfied in this type. -Type ('a, 'b) t should be an instance of ('c, 'c) t -# type 'a t = 'a -type u = int t -# type 'a t constraint 'a = int -# Characters 26-32: -Constraints are not satisfied in this type. -Type 'a u t should be an instance of int t -# type 'a u = 'a constraint 'a = int -type 'a v = 'a u t constraint 'a = int -# type g = int -# type 'a t = unit constraint 'a = g -# Characters 26-32: -Constraints are not satisfied in this type. -Type 'a u t should be an instance of g t -# type 'a u = 'a constraint 'a = g -type 'a v = 'a u t constraint 'a = int -# Characters 38-58: -In the definition of v, type 'a list u should be 'a u -# type 'a t = 'a -type 'a u = A of 'a t -# type 'a t = < a : 'a > -# - : ('a t as 'a) -> ('b t as 'b) t = <fun> -# type u = 'a t as 'a -# type t = A | B -# - : [> `A ] * t -> int = <fun> -# - : [> `A ] * t -> int = <fun> -# - : [> `A ] option * t -> int = <fun> -# - : [> `A ] option * t -> int = <fun> -# - : t * [< `A | `B ] -> int = <fun> -# - : [< `A | `B ] * t -> int = <fun> -# Characters 0-41: -Warning: this pattern-matching is not exhaustive. -Here is an example of a value that is not matched: -(`AnyExtraTag, `AnyExtraTag) -- : [> `A | `B ] * [> `A | `B ] -> int = <fun> -# Characters 0-29: -Warning: this pattern-matching is not exhaustive. -Here is an example of a value that is not matched: -(_, 0) -Characters 21-24: -Warning: this match case is unused. -- : [ `B ] * int -> int = <fun> -# Characters 0-29: -Warning: this pattern-matching is not exhaustive. -Here is an example of a value that is not matched: -(0, _) -Characters 21-24: -Warning: this match case is unused. -- : int * [ `B ] -> int = <fun> -# Characters 69-135: -Constraints are not satisfied in this type. -Type -([> `B of 'a ], 'a) b as 'a -should be an instance of -(('b, [> `A of 'b ] as 'c) a as 'b, 'c) b -# class type ['a, 'b] a = - object - constraint 'a = ('a, 'b) #a - constraint 'b = ('a, 'b) #b - method as_a : ('a, 'b) a - method b : 'b - end -class type ['a, 'b] b = - object - constraint 'a = ('a, 'b) #a - constraint 'b = ('a, 'b) #b - method a : 'a - method as_b : ('a, 'b) b - end -class type ['a] ca = - object ('b) - constraint 'a = ('b, 'a) #b - method as_a : ('b, 'a) a - method b : 'a - end -class type ['a] cb = - object ('b) - constraint 'a = ('a, 'b) #a - method a : 'a - method as_b : ('a, 'b) b - end -type bt = 'a ca cb as 'a -# class c : object method m : int end -# val f : unit -> c = <fun> -# val f : unit -> c = <fun> -# Characters 11-60: -Warning: the following private methods were made public implicitly: - n -val f : unit -> < m : int; n : int > = <fun> -# Characters 11-56: -This object is expected to have type c = < m : int > but has actually type - < m : int; n : 'a > -Only the second object type has a method n -# Characters 11-69: -This object is expected to have type < n : int > but has actually type - < m : 'a > -Only the first object type has a method n -# diff --git a/testlabl/poly.ml b/testlabl/poly.ml deleted file mode 100644 index 3ce1f30e3a..0000000000 --- a/testlabl/poly.ml +++ /dev/null @@ -1,468 +0,0 @@ -(* $Id$ *) -(* - Polymorphic methods are now available in the main branch. - Enjoy. -*) - -(* Tests for explicit polymorphism *) -open StdLabels;; - -type 'a t = { t : 'a };; -type 'a fold = { fold : 'b. f:('b -> 'a -> 'b) -> init:'b -> 'b };; -let f l = { fold = List.fold_left l };; -(f [1;2;3]).fold ~f:(+) ~init:0;; - -class ['b] ilist l = object - val l = l - method add x = {< l = x :: l >} - method fold : 'a. f:('a -> 'b -> 'a) -> init:'a -> 'a = - List.fold_left l -end -;; -class virtual ['a] vlist = object (_ : 'self) - method virtual add : 'a -> 'self - method virtual fold : 'b. f:('b -> 'a -> 'b) -> init:'b -> 'b -end -;; -class ilist2 l = object - inherit [int] vlist - val l = l - method add x = {< l = x :: l >} - method fold = List.fold_left l -end -;; -let ilist2 l = object - inherit [_] vlist - val l = l - method add x = {< l = x :: l >} - method fold = List.fold_left l -end -;; -class ['a] ilist3 l = object - inherit ['a] vlist - val l = l - method add x = {< l = x :: l >} - method fold = List.fold_left l -end -;; -class ['a] ilist4 (l : 'a list) = object - val l = l - method virtual add : _ - method add x = {< l = x :: l >} - method virtual fold : 'b. f:('b -> 'a -> 'b) -> init:'b -> 'b - method fold = List.fold_left l -end -;; -class ['a] ilist5 (l : 'a list) = object (self) - val l = l - method add x = {< l = x :: l >} - method virtual fold : 'b. f:('b -> 'a -> 'b) -> init:'b -> 'b - method virtual fold2 : 'b. f:('b -> 'a -> 'b) -> init:'b -> 'b - method fold2 ~f ~init = self#fold ~f ~init:(self#fold ~f ~init) - method fold = List.fold_left l -end -;; -class ['a] ilist6 l = object (self) - inherit ['a] vlist - val l = l - method add x = {< l = x :: l >} - method virtual fold2 : 'b. f:('b -> 'a -> 'b) -> init:'b -> 'b - method fold2 ~f ~init = self#fold ~f ~init:(self#fold ~f ~init) - method fold = List.fold_left l -end -;; -class virtual ['a] olist = object - method virtual fold : 'c. f:('a -> 'c -> 'c) -> init:'c -> 'c -end -;; -class ['a] onil = object - inherit ['a] olist - method fold ~f ~init = init -end -;; -class ['a] ocons ~hd ~tl = object (_ : 'b) - inherit ['a] olist - val hd : 'a = hd - val tl : 'a olist = tl - method fold ~f ~init = f hd (tl#fold ~f ~init) -end -;; -class ['a] ostream ~hd ~tl = object (_ : 'b) - inherit ['a] olist - val hd : 'a = hd - val tl : _ #olist = (tl : 'a ostream) - method fold ~f ~init = f hd (tl#fold ~f ~init) - method empty = false -end -;; -class ['a] ostream1 ~hd ~tl = object (self : 'b) - inherit ['a] olist - val hd = hd - val tl : 'b = tl - method hd = hd - method tl = tl - method fold ~f ~init = - self#tl#fold ~f ~init:(f self#hd init) -end -;; - -class vari = object - method virtual m : 'a. ([< `A|`B|`C] as 'a) -> int - method m = function `A -> 1 | `B|`C -> 0 -end -;; -class vari = object - method m : 'a. ([< `A|`B|`C] as 'a) -> int = function `A -> 1 | `B|`C -> 0 -end -;; -module V = - struct - type v = [`A | `B | `C] - let m : [< v] -> int = function `A -> 1 | #v -> 0 - end -;; -class varj = object - method virtual m : 'a. ([< V.v] as 'a) -> int - method m = V.m -end -;; - -module type T = sig - class vari : object method m : 'a. ([< `A | `B | `C] as 'a) -> int end -end -;; -module M0 = struct - class vari = object - method virtual m : 'a. ([< `A|`B|`C] as 'a) -> int - method m = function `A -> 1 | `B|`C -> 0 - end -end -;; -module M : T = M0 -;; -let v = new M.vari;; -v#m `A;; - -class point ~x ~y = object - val x : int = x - val y : int = y - method x = x - method y = y -end -;; -class color_point ~x ~y ~color = object - inherit point ~x ~y - val color : string = color - method color = color -end -;; -class circle (p : #point) ~r = object - val p = (p :> point) - val r = r - method virtual distance : 'a. (#point as 'a) -> float - method distance p' = - let dx = p#x - p'#x and dy = p#y - p'#y in - let d = sqrt (float (dx * dx + dy * dy)) -. float r in - if d < 0. then 0. else d -end -;; -let p0 = new point ~x:3 ~y:5 -let p1 = new point ~x:10 ~y:13 -let cp = new color_point ~x:12 ~y:(-5) ~color:"green" -let c = new circle p0 ~r:2 -let d = c#distance cp -;; -let f (x : < m : 'a. 'a -> 'a >) = (x : < m : 'b. 'b -> 'b >) -;; -let f (x : < m : 'a. 'a -> 'a list >) = (x : < m : 'b. 'b -> 'c >) -;; - -class id = object - method virtual id : 'a. 'a -> 'a - method id x = x -end -;; - -class type id_spec = object - method id : 'a -> 'a -end -;; -class id_impl = object (_ : #id_spec) - method id x = x -end -;; - -class a = object - method m = (new b : id_spec)#id true -end -and b = object (_ : #id_spec) - method id x = x -end -;; - -class ['a] id1 = object - method virtual id : 'b. 'b -> 'a - method id x = x -end -;; -class id2 (x : 'a) = object - method virtual id : 'b. 'b -> 'a - method id x = x -end -;; -class id3 x = object - val x = x - method virtual id : 'a. 'a -> 'a - method id _ = x -end -;; -class id4 () = object - val mutable r = None - method virtual id : 'a. 'a -> 'a - method id x = - match r with - None -> r <- Some x; x - | Some y -> y -end -;; -class c = object - method virtual m : 'a 'b. 'a -> 'b -> 'a - method m x y = x -end -;; - -let f1 (f : id) = f#id 1, f#id true -;; -let f2 f = (f : id)#id 1, (f : id)#id true -;; -let f3 f = f#id 1, f#id true -;; -let f4 f = ignore(f : id); f#id 1, f#id true -;; - -class c = object - method virtual m : 'a. (#id as 'a) -> int * bool - method m (f : #id) = f#id 1, f#id true -end -;; - -class id2 = object (_ : 'b) - method virtual id : 'a. 'a -> 'a - method id x = x - method mono (x : int) = x -end -;; -let app = new c #m (new id2) -;; -type 'a foo = 'a foo list -;; - -class ['a] bar (x : 'a) = object end -;; -type 'a foo = 'a foo bar -;; - -fun x -> (x : < m : 'a. 'a * 'b > as 'b)#m;; -fun x -> (x : < m : 'a. 'b * 'a list> as 'b)#m;; -let f x = (x : < m : 'a. 'b * (< n : 'a; .. > as 'a) > as 'b)#m;; - -fun (x : < p : 'a. < m : 'a ; n : 'b ; .. > as 'a > as 'b) -> x#p;; - -type sum = T of < id: 'a. 'a -> 'a > ;; -fun (T x) -> x#id;; - -type record = { r: < id: 'a. 'a -> 'a > } ;; -fun x -> x.r#id;; -fun {r=x} -> x#id;; - -class myself = object (self) - method self : 'a. 'a -> 'b = fun _ -> self -end;; - -class number = object (self : 'self) - val num = 0 - method num = num - method succ = {< num = num + 1 >} - method prev = - self#switch ~zero:(fun () -> failwith "zero") ~prev:(fun x -> x) - method switch : 'a. zero:(unit -> 'a) -> prev:('self -> 'a) -> 'a = - fun ~zero ~prev -> - if num = 0 then zero () else prev {< num = num - 1 >} -end -;; - -let id x = x -;; -class c = object - method id : 'a. 'a -> 'a = id -end -;; -class c' = object - inherit c - method id = id -end -;; -class d = object - inherit c as c - val mutable count = 0 - method id x = count <- count+1; x - method count = count - method old : 'a. 'a -> 'a = c#id -end -;; -class ['a] olist l = object - val l = l - method fold : 'b. f:('a -> 'b -> 'b) -> init:'b -> 'b - = List.fold_right l - method cons a = {< l = a :: l >} -end -;; -let sum (l : 'a #olist) = l#fold ~f:(fun x acc -> x+acc) ~init:0 -;; -let count (l : 'a #olist) = l#fold ~f:(fun _ acc -> acc+1) ~init:0 -;; -let append (l : 'a #olist) (l' : 'b #olist) = - l#fold ~init:l' ~f:(fun x acc -> acc#cons x) -;; - -type 'a t = unit -;; -class o = object method x : 'a. ([> `A] as 'a) t -> unit = fun _ -> () end -;; - -class c = object method m = new d () end and d ?(x=0) () = object end;; -class d ?(x=0) () = object end and c = object method m = new d () end;; - -class type numeral = object method fold : ('a -> 'a) -> 'a -> 'a end -class zero = object (_ : #numeral) method fold f x = x end -class next (n : #numeral) = - object (_ : #numeral) method fold f x = n#fold f (f x) end -;; - -class type node_type = object - method as_variant : [> `Node of node_type] -end;; -class node : node_type = object (self) - method as_variant : 'a. [> `Node of node_type] as 'a - = `Node (self :> node_type) -end;; -class node = object (self : #node_type) - method as_variant = `Node (self :> node_type) -end;; - -type bad = {bad : 'a. 'a option ref};; -let bad = {bad = ref None};; -type bad2 = {mutable bad2 : 'a. 'a option ref option};; -let bad2 = {bad2 = None};; -bad2.bad2 <- Some (ref None);; - -(* PR#1374 *) - -type 'a t= [`A of 'a];; -class c = object (self) - method m : 'a. ([> 'a t] as 'a) -> unit - = fun x -> self#m x -end;; -class c = object (self) - method m : 'a. ([> 'a t] as 'a) -> unit = function - | `A x' -> self#m x' - | _ -> failwith "c#m" -end;; -class c = object (self) - method m : 'a. ([> 'a t] as 'a) -> 'a = fun x -> self#m x -end;; - -(* usage avant instance *) -class c = object method m : 'a. 'a option -> ([> `A] as 'a) = fun x -> `A end;; - -(* various old bugs *) -class virtual ['a] visitor = -object method virtual caseNil : 'a end -and virtual int_list = -object method virtual visit : 'a.('a visitor -> 'a) end;; - -type ('a,'b) list_visitor = < caseNil : 'a; caseCons : 'b -> 'b list -> 'a > -type 'b alist = < visit : 'a. ('a,'b) list_visitor -> 'a > - -(* PR#1607 *) -class type ct = object ('s) - method fold : ('b -> 's -> 'b) -> 'b -> 'b -end -type t = {f : 'a 'b. ('b -> (#ct as 'a) -> 'b) -> 'b};; - -(* PR#1663 *) -type t = u and u = t;; - -(* PR#1731 *) -class ['t] a = object constraint 't = [> `A of 't a] end -type t = [ `A of t a ];; - -(* Wrong in 3.06 *) -type ('a,'b) t constraint 'a = 'b and ('a,'b) u = ('a,'b) t;; - -(* Full polymorphism if we do not expand *) -type 'a t = 'a and u = int t;; - -(* Loose polymorphism if we expand *) -type 'a t constraint 'a = int;; -type 'a u = 'a and 'a v = 'a u t;; -type 'a u = 'a and 'a v = 'a u t constraint 'a = int;; - -(* Behaviour is unstable *) -type g = int;; -type 'a t = unit constraint 'a = g;; -type 'a u = 'a and 'a v = 'a u t;; -type 'a u = 'a and 'a v = 'a u t constraint 'a = int;; - -(* Example of wrong expansion *) -type 'a u = < m : 'a v > and 'a v = 'a list u;; - -(* PR#1744: Ctype.matches *) -type 'a t = 'a -type 'a u = A of 'a t;; - -(* Unification of cyclic terms *) -type 'a t = < a : 'a >;; -fun (x : 'a t as 'a) -> (x : 'b t);; -type u = 'a t as 'a;; - - -(* Variant tests *) -type t = A | B;; -function `A,_ -> 1 | _,A -> 2 | _,B -> 3;; -function `A,_ -> 1 | _,(A|B) -> 2;; -function Some `A, _ -> 1 | Some _, A -> 2 | None, A -> 3 | _, B -> 4;; -function Some `A, A -> 1 | Some `A, B -> 1 - | Some _, A -> 2 | None, A -> 3 | _, B -> 4;; -function A, `A -> 1 | A, `B -> 2 | B, _ -> 3;; -function `A, A -> 1 | `B, A -> 2 | _, B -> 3;; -function (`A|`B), _ -> 0 | _,(`A|`B) -> 1;; -function `B,1 -> 1 | _,1 -> 2;; -function 1,`B -> 1 | 1,_ -> 2;; - -(* pass typetexp, but fails during Typedecl.check_recursion *) -type ('a, 'b) a = 'a -> unit constraint 'a = [> `B of ('a, 'b) b as 'b] -and ('a, 'b) b = 'b -> unit constraint 'b = [> `A of ('a, 'b) a as 'a];; - -(* PR#1917: expanding may change original in Ctype.unify2 *) -class type ['a, 'b] a = object - method b: ('a, 'b) #b as 'b - method as_a: ('a, 'b) a -end and ['a, 'b] b = object - method a: ('a, 'b) #a as 'a - method as_b: ('a, 'b) b -end - -class type ['b] ca = object ('s) inherit ['s, 'b] a end -class type ['a] cb = object ('s) inherit ['a, 's] b end - -type bt = 'b ca cb as 'b -;; - -(* final classes, etc... *) -class c = object method m = 1 end;; -let f () = object (self:c) method m = 1 end;; -let f () = object (self:c) method private n = 1 method m = self#n end;; -let f () = object method private n = 1 method m = {<>}#n end;; -let f () = object (self:c) method n = 1 method m = 2 end;; -let f () = object (_:'s) constraint 's = < n : int > method m = 1 end;; diff --git a/testlabl/printers.ml b/testlabl/printers.ml deleted file mode 100644 index c80c42d66c..0000000000 --- a/testlabl/printers.ml +++ /dev/null @@ -1,11 +0,0 @@ -(* $Id$ *) - -open Types - -let ignore_abbrevs ppf ab = - let s = match ab with - Mnil -> "Mnil" - | Mlink _ -> "Mlink _" - | Mcons _ -> "Mcons _" - in - Format.pp_print_string ppf s diff --git a/testlabl/tests.ml b/testlabl/tests.ml deleted file mode 100644 index c39d152fb2..0000000000 --- a/testlabl/tests.ml +++ /dev/null @@ -1,22 +0,0 @@ -(* $Id$ *) - -let f1 = function `a x -> x=1 | `b -> true -let f2 = function `a x -> x | `b -> true -let f3 = function `b -> true -let f x = f1 x && f2 x - -let sub s ?:pos{=0} ?:len{=String.length s - pos} () = - String.sub s pos len - -let cCAMLtoTKpack_options w = function - `After v1 -> "-after" - | `Anchor v1 -> "-anchor" - | `Before v1 -> "-before" - | `Expand v1 -> "-expand" - | `Fill v1 -> "-fill" - | `In v1 -> "-in" - | `Ipadx v1 -> "-ipadx" - | `Ipady v1 -> "-ipady" - | `Padx v1 -> "-padx" - | `Pady v1 -> "-pady" - | `Side v1 -> "-side" |
