Types printer: use commas rather than * for tuples

This commit is contained in:
Louis Gesbert 2024-06-19 16:42:45 +02:00
parent 69e862a9d1
commit 23b196aace
8 changed files with 47 additions and 47 deletions

View File

@ -102,7 +102,7 @@ let rec typ_gen
Format.pp_open_hvbox fmt 2; Format.pp_open_hvbox fmt 2;
pp_color_string (List.hd colors) fmt "("; pp_color_string (List.hd colors) fmt "(";
(Format.pp_print_list (Format.pp_print_list
~pp_sep:(fun fmt () -> Format.fprintf fmt " %a@ " op_style "*") ~pp_sep:(fun fmt () -> Format.fprintf fmt "%a@ " op_style ",")
(typ ~colors:(List.tl colors))) (typ ~colors:(List.tl colors)))
fmt ts; fmt ts;
Format.pp_close_box fmt (); Format.pp_close_box fmt ();

View File

@ -76,14 +76,14 @@ let scope S (x: integer|internal|output) =
10. 10.
map (λ (i: integer) → to_rat i) [1; 2; 3]) map (λ (i: integer) → to_rat i) [1; 2; 3])
= 3.; = 3.;
assert (let weights : list of (integer * decimal) = assert (let weights : list of (integer, decimal) =
map (λ (i: integer) → map (λ (i: integer) →
(i, let i1 : integer = i in (i, let i1 : integer = i in
to_rat ((2 - i1) * (2 - i1)))) to_rat ((2 - i1) * (2 - i1))))
[1; 2; 3] [1; 2; 3]
in in
reduce reduce
(λ (x1: (integer * decimal)) (x2: (integer * decimal)) → (λ (x1: (integer, decimal)) (x2: (integer, decimal)) →
if x1.1 < x2.1 then x1 else x2) if x1.1 < x2.1 then x1 else x2)
let i : integer = 42 in let i : integer = 42 in
(i, let i1 : integer = i in (i, let i1 : integer = i in

View File

@ -34,7 +34,7 @@ let topval closure_f : (closure_env, integer) → integer =
if (from_closure_env env).0 then y else - y if (from_closure_env env).0 then y else - y
let scope S (S_in: S_in {x_in: bool}): S {z: integer} = let scope S (S_in: S_in {x_in: bool}): S {z: integer} =
let get x : bool = S_in.x_in in let get x : bool = S_in.x_in in
let set f : ((closure_env, integer) → integer * closure_env) = let set f : ((closure_env, integer) → integer, closure_env) =
(closure_f, to_closure_env (x)) (closure_f, to_closure_env (x))
in in
let set z : integer = f.0 f.1 -1 in let set z : integer = f.0 f.1 -1 in

View File

@ -29,7 +29,7 @@ let scope S (S_in: S_in {x_in: list of integer}): S {y: integer} =
let get x : list of integer = S_in.x_in in let get x : list of integer = S_in.x_in in
let set y : integer = let set y : integer =
(reduce (reduce
(λ (x1: (integer * integer)) (x2: (integer * integer)) → (λ (x1: (integer, integer)) (x2: (integer, integer)) →
if x1.1 < x2.1 then x1 else x2) if x1.1 < x2.1 then x1 else x2)
(-1, -1) (-1, -1)
map (λ (potential_max: integer) → (potential_max, potential_max)) x).0 map (λ (potential_max: integer) → (potential_max, potential_max)) x).0
@ -60,7 +60,7 @@ let scope S (S_in: S_in {x_in: list of integer}): S {y: integer} =
(λ () → true) (λ () → true)
(λ () → (λ () →
ESome ESome
(let weights : list of (integer * integer) = (let weights : list of (integer, integer) =
map (λ (potential_max: integer) → map (λ (potential_max: integer) →
(potential_max, (potential_max,
let potential_max1 : integer = potential_max in let potential_max1 : integer = potential_max in
@ -68,7 +68,7 @@ let scope S (S_in: S_in {x_in: list of integer}): S {y: integer} =
x x
in in
reduce reduce
(λ (x1: (integer * integer)) (x2: (integer * integer)) → (λ (x1: (integer, integer)) (x2: (integer, integer)) →
if x1.1 < x2.1 then x1 else x2) if x1.1 < x2.1 then x1 else x2)
let potential_max : integer = -1 in let potential_max : integer = -1 in
(potential_max, (potential_max,

View File

@ -25,17 +25,17 @@ $ catala Typecheck --check-invariants
$ catala Lcalc --avoid-exceptions -O --closure-conversion $ catala Lcalc --avoid-exceptions -O --closure-conversion
type Eoption = | ENone of unit | ESome of any type Eoption = | ENone of unit | ESome of any
type S_in = { x_in: bool; } type S_in = { x_in: bool; }
type S = { f: ((closure_env, integer) → integer * closure_env); } type S = { f: ((closure_env, integer) → integer, closure_env); }
let topval closure_f : (closure_env, integer) → integer = let topval closure_f : (closure_env, integer) → integer =
λ (env: closure_env) (y: integer) → λ (env: closure_env) (y: integer) →
if (from_closure_env env).0 then y else - y if (from_closure_env env).0 then y else - y
let scope S let scope S
(S_in: S_in {x_in: bool}) (S_in: S_in {x_in: bool})
: S {f: ((closure_env, integer) → integer * closure_env)} : S {f: ((closure_env, integer) → integer, closure_env)}
= =
let get x : bool = S_in.x_in in let get x : bool = S_in.x_in in
let set f : ((closure_env, integer) → integer * closure_env) = let set f : ((closure_env, integer) → integer, closure_env) =
(closure_f, to_closure_env (x)) (closure_f, to_closure_env (x))
in in
return { S f = f; } return { S f = f; }

View File

@ -32,11 +32,11 @@ $ catala Typecheck --check-invariants
```catala-test-inline ```catala-test-inline
$ catala Lcalc -s T --avoid-exceptions -O --closure-conversion $ catala Lcalc -s T --avoid-exceptions -O --closure-conversion
let scope T (T_in: T_in): T {y: integer} = let scope T (T_in: T_in): T {y: integer} =
let set s : S {f: ((closure_env, integer) → integer * closure_env)} = let set s : S {f: ((closure_env, integer) → integer, closure_env)} =
{ S f = (closure_s, to_closure_env ()); } { S f = (closure_s, to_closure_env ()); }
in in
let set y : integer = let set y : integer =
let code_and_env : ((closure_env, integer) → integer * closure_env) = let code_and_env : ((closure_env, integer) → integer, closure_env) =
s.f s.f
in in
code_and_env.0 code_and_env.1 2 code_and_env.0 code_and_env.1 2

View File

@ -56,20 +56,20 @@ $ catala Typecheck --check-invariants
$ catala Lcalc --avoid-exceptions -O --closure-conversion $ catala Lcalc --avoid-exceptions -O --closure-conversion
type Eoption = | ENone of unit | ESome of any type Eoption = | ENone of unit | ESome of any
type Result = { type Result = {
r: ((closure_env, integer) → integer * closure_env); r: ((closure_env, integer) → integer, closure_env);
q: integer; q: integer;
} }
type SubFoo1_in = { x_in: integer; } type SubFoo1_in = { x_in: integer; }
type SubFoo1 = { type SubFoo1 = {
x: integer; x: integer;
y: ((closure_env, integer) → integer * closure_env); y: ((closure_env, integer) → integer, closure_env);
} }
type SubFoo2_in = { x1_in: integer; x2_in: integer; } type SubFoo2_in = { x1_in: integer; x2_in: integer; }
type SubFoo2 = { type SubFoo2 = {
x1: integer; x1: integer;
y: ((closure_env, integer) → integer * closure_env); y: ((closure_env, integer) → integer, closure_env);
} }
type Foo_in = { b_in: ((closure_env, unit) → eoption bool * closure_env); } type Foo_in = { b_in: ((closure_env, unit) → eoption bool, closure_env); }
type Foo = { z: integer; } type Foo = { z: integer; }
let topval closure_y : (closure_env, integer) → integer = let topval closure_y : (closure_env, integer) → integer =
@ -79,49 +79,49 @@ let scope SubFoo1
(SubFoo1_in: SubFoo1_in {x_in: integer}) (SubFoo1_in: SubFoo1_in {x_in: integer})
: SubFoo1 { : SubFoo1 {
x: integer; x: integer;
y: ((closure_env, integer) → integer * closure_env) y: ((closure_env, integer) → integer, closure_env)
} }
= =
let get x : integer = SubFoo1_in.x_in in let get x : integer = SubFoo1_in.x_in in
let set y : ((closure_env, integer) → integer * closure_env) = let set y : ((closure_env, integer) → integer, closure_env) =
(closure_y, to_closure_env (x)) (closure_y, to_closure_env (x))
in in
return { SubFoo1 x = x; y = y; } return { SubFoo1 x = x; y = y; }
let topval closure_y : (closure_env, integer) → integer = let topval closure_y : (closure_env, integer) → integer =
λ (env: closure_env) (z: integer) → λ (env: closure_env) (z: integer) →
let env1 : (integer * integer) = from_closure_env env in let env1 : (integer, integer) = from_closure_env env in
((env1.1 + env1.0 + z)) ((env1.1 + env1.0 + z))
let scope SubFoo2 let scope SubFoo2
(SubFoo2_in: SubFoo2_in {x1_in: integer; x2_in: integer}) (SubFoo2_in: SubFoo2_in {x1_in: integer; x2_in: integer})
: SubFoo2 { : SubFoo2 {
x1: integer; x1: integer;
y: ((closure_env, integer) → integer * closure_env) y: ((closure_env, integer) → integer, closure_env)
} }
= =
let get x1 : integer = SubFoo2_in.x1_in in let get x1 : integer = SubFoo2_in.x1_in in
let get x2 : integer = SubFoo2_in.x2_in in let get x2 : integer = SubFoo2_in.x2_in in
let set y : ((closure_env, integer) → integer * closure_env) = let set y : ((closure_env, integer) → integer, closure_env) =
(closure_y, to_closure_env (x2, x1)) (closure_y, to_closure_env (x2, x1))
in in
return { SubFoo2 x1 = x1; y = y; } return { SubFoo2 x1 = x1; y = y; }
let topval closure_r : (closure_env, integer) → integer = let topval closure_r : (closure_env, integer) → integer =
λ (env: closure_env) (param0: integer) → λ (env: closure_env) (param0: integer) →
let code_and_env : ((closure_env, integer) → integer * closure_env) = let code_and_env : ((closure_env, integer) → integer, closure_env) =
(from_closure_env env).0.y (from_closure_env env).0.y
in in
code_and_env.0 code_and_env.1 param0 code_and_env.0 code_and_env.1 param0
let topval closure_r : (closure_env, integer) → integer = let topval closure_r : (closure_env, integer) → integer =
λ (env: closure_env) (param0: integer) → λ (env: closure_env) (param0: integer) →
let code_and_env : ((closure_env, integer) → integer * closure_env) = let code_and_env : ((closure_env, integer) → integer, closure_env) =
(from_closure_env env).0.y (from_closure_env env).0.y
in in
code_and_env.0 code_and_env.1 param0 code_and_env.0 code_and_env.1 param0
let scope Foo let scope Foo
(Foo_in: (Foo_in:
Foo_in {b_in: ((closure_env, unit) → eoption bool * closure_env)}) Foo_in {b_in: ((closure_env, unit) → eoption bool, closure_env)})
: Foo {z: integer} : Foo {z: integer}
= =
let get b : ((closure_env, unit) → eoption bool * closure_env) = let get b : ((closure_env, unit) → eoption bool, closure_env) =
Foo_in.b_in Foo_in.b_in
in in
let set b : bool = let set b : bool =
@ -133,7 +133,7 @@ let scope Foo
in in
let set r : let set r :
Result { Result {
r: ((closure_env, integer) → integer * closure_env); r: ((closure_env, integer) → integer, closure_env);
q: integer q: integer
} = } =
if b then if b then
@ -152,7 +152,7 @@ let scope Foo
{ Result r = f.y; q = f.x1; } { Result r = f.y; q = f.x1; }
in in
let set z : integer = let set z : integer =
let code_and_env : ((closure_env, integer) → integer * closure_env) = let code_and_env : ((closure_env, integer) → integer, closure_env) =
r.r r.r
in in
code_and_env.0 code_and_env.1 1 code_and_env.0 code_and_env.1 1

View File

@ -99,55 +99,55 @@ in
let lis3 : list of money = let lis3 : list of money =
[¤20.00; ¤200.00; ¤10.00; ¤23.00; ¤25.00; ¤12.00] [¤20.00; ¤200.00; ¤10.00; ¤23.00; ¤25.00; ¤12.00]
in in
let grok : (decimal, money, money) → (money * decimal) = let grok : (decimal, money, money) → (money, decimal) =
λ (dec: decimal) (mon1: money) (mon2: money) → λ (dec: decimal) (mon1: money) (mon2: money) →
(mon1 * dec, mon1 / mon2) (mon1 * dec, mon1 / mon2)
in in
let tlist : list of (decimal * money * money) = let tlist : list of (decimal, money, money) =
map2 map2
(λ (a: decimal) (b_c: (money * money)) → (a, b_c.0, b_c.1)) (λ (a: decimal) (b_c: (money, money)) → (a, b_c.0, b_c.1))
lis1 lis1
map2 (λ (b: money) (c: money) → (b, c)) lis2 lis3 map2 (λ (b: money) (c: money) → (b, c)) lis2 lis3
in in
let S : S_in → S = let S : S_in → S =
λ (S_in: S_in) → λ (S_in: S_in) →
let r1 : list of (money * decimal) = let r1 : list of (money, decimal) =
map (λ (x: (decimal * money * money)) → grok x.0 x.1 x.2) tlist map (λ (x: (decimal, money, money)) → grok x.0 x.1 x.2) tlist
in in
let r2 : list of (money * decimal) = let r2 : list of (money, decimal) =
map2 map2
(λ (x: decimal) (zip: (money * money)) → (λ (x: decimal) (zip: (money, money)) →
let x1 : (decimal * money * money) = (x, zip.0, zip.1) in let x1 : (decimal, money, money) = (x, zip.0, zip.1) in
grok x1.0 x1.1 x1.2) grok x1.0 x1.1 x1.2)
lis1 lis1
map2 (λ (x: money) (zip: money) → (x, zip)) lis2 lis3 map2 (λ (x: money) (zip: money) → (x, zip)) lis2 lis3
in in
let r3 : list of (money * decimal) = let r3 : list of (money, decimal) =
map2 map2
(λ (x: decimal) (y_z: (money * money)) → (λ (x: decimal) (y_z: (money, money)) →
let x_y_z : (decimal * money * money) = (x, y_z.0, y_z.1) in let x_y_z : (decimal, money, money) = (x, y_z.0, y_z.1) in
grok x_y_z.0 x_y_z.1 x_y_z.2) grok x_y_z.0 x_y_z.1 x_y_z.2)
lis1 lis1
map2 (λ (y: money) (z: money) → (y, z)) lis2 lis3 map2 (λ (y: money) (z: money) → (y, z)) lis2 lis3
in in
let r4 : list of (money * decimal) = let r4 : list of (money, decimal) =
map (λ (x_y_z: (decimal * money * money)) → map (λ (x_y_z: (decimal, money, money)) →
(x_y_z.1 * x_y_z.0, x_y_z.1 / x_y_z.2)) (x_y_z.1 * x_y_z.0, x_y_z.1 / x_y_z.2))
tlist tlist
in in
let r5 : list of (money * decimal) = let r5 : list of (money, decimal) =
map2 map2
(λ (x: decimal) (y_z: (money * money)) → (λ (x: decimal) (y_z: (money, money)) →
let x_y_z : (decimal * money * money) = (x, y_z.0, y_z.1) in let x_y_z : (decimal, money, money) = (x, y_z.0, y_z.1) in
(x_y_z.1 * x_y_z.0, x_y_z.1 / x_y_z.2)) (x_y_z.1 * x_y_z.0, x_y_z.1 / x_y_z.2))
lis1 lis1
map2 (λ (y: money) (z: money) → (y, z)) lis2 lis3 map2 (λ (y: money) (z: money) → (y, z)) lis2 lis3
in in
let r6 : list of (money * decimal) = let r6 : list of (money, decimal) =
map2 map2
(λ (xy: (decimal * money)) (z: money) → (λ (xy: (decimal, money)) (z: money) →
let xy_z : ((decimal * money) * money) = (xy, z) in let xy_z : ((decimal, money), money) = (xy, z) in
let xy1 : (decimal * money) = xy_z.0 in let xy1 : (decimal, money) = xy_z.0 in
let z1 : money = xy_z.1 in let z1 : money = xy_z.1 in
(xy1.1 * xy1.0, xy1.1 / z1)) (xy1.1 * xy1.0, xy1.1 / z1))
map2 (λ (x: decimal) (y: money) → (x, y)) lis1 lis2 map2 (λ (x: decimal) (y: money) → (x, y)) lis1 lis2