File: tupled_function.ml

package info (click to toggle)
ocaml 5.3.0-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 43,124 kB
  • sloc: ml: 355,439; ansic: 51,636; sh: 25,098; asm: 5,413; makefile: 3,673; python: 919; javascript: 273; awk: 253; perl: 59; fortran: 21; cs: 9
file content (31 lines) | stat: -rw-r--r-- 676 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
(* TEST
 {
   bytecode;
 }{
   native;
 }
*)
type 'a t =
  | N of 'a
  | C of 'a t * 'a t

(* This function is recognized as 'tupled' by the backend; it is
   a regression-test to check that our TMC transformation works as
   expected for tupled (rather than curried) functions.

   Note: it is important to test the 'native' compiler here, as the
   bytecode does not perform the same arity-raising optimizations. *)
let[@tail_mod_cons] rec map (f, l) =
  match l with
  | N v -> N (f v)
  | C (a, b) ->
      C (map (f, a), (map [@tailcall]) (f, b))

let v = C (C (N 1, N 2), N 3)

let v' =
  let arg = (succ, v) in
  map arg

let () =
  assert (v' = C (C (N 2, N 3), N 4))