raise version to 0.2.0
[sqlgg.git] / poly.ml
blobb3e1ef0513a6d63d620ce4a19824bb9033924420
2 type t = [`A of int | `B of string | `Z of t]
4 let rec use_t = function
5 | `A i -> i
6 | `B s -> String.length s
7 | `Z x -> use_t x
9 let rec show_t
10 : t -> unit (* comment this *)
11 = function
12 | `A i -> print_endline "A"
13 | `B s -> print_endline "B"
14 | `Z x -> (print_string "Z"; show_t x)
16 let rec make_narrow = function
17 | `A i -> `A i
18 | `B s -> `A (String.length s)
19 | `Z x -> `Z (make_narrow x)
21 let rec use_narrow = function
22 | `A i -> i
23 | `Z x -> (use_narrow x)
25 let tee f x = f x; x
27 let final x =
28 let y = make_narrow x in
29 show_t y;
30 use_narrow y
32 let final x = use_narrow (make_narrow (tee show_t x))
34 let final x =
35 use_narrow (tee (fun z -> show_t z) (make_narrow x))