From 0dcbd664ab1f4089abb99918acf2fba2aac9f77e Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Thu, 30 Mar 2023 14:08:55 +0000 Subject: [PATCH 01/12] test: add repro for 489 --- test/dune | 5 +++++ test/gh489.t | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 test/gh489.t diff --git a/test/dune b/test/dune index 87a6a8adfe..6de6bae406 100644 --- a/test/dune +++ b/test/dune @@ -5,3 +5,8 @@ setup.sh (package melange) (package reactjs-jsx-ppx))) + +(cram + (applies_to setters) + (deps + (package rescript-syntax))) diff --git a/test/gh489.t b/test/gh489.t new file mode 100644 index 0000000000..4872ae23cb --- /dev/null +++ b/test/gh489.t @@ -0,0 +1,38 @@ +Repro for GitHub issue 489, first try setting values in nested objects with OCaml syntax + + $ . ./setup.sh + $ cat > foo.ml < type person = < age :int [@bs.set ] > Js.t + > type entry = < person :person [@bs.set ] > Js.t + > external entry : entry = "entry"[@@bs.val ] + > let () = ((entry ## person) ## age) #= 99 + > EOF + $ melc foo.ml + // Generated by Melange + 'use strict'; + + + entry.person.age = 99; + + /* Not a pure module */ + +Now let's try with ReScript syntax + + $ cat > foo.res < type person = {@set "age": int} + > type entry = {@set "person": person} + > @val external entry: entry = "entry" + > entry["person"]["age"] = 99 + $ rescript_syntax -print=ml foo.res + type nonrec person = < age: int [@set ] > Js.t + type nonrec entry = < person: person [@set ] > Js.t + external entry : entry = "entry"[@@val ] + ;;(entry ## person)#age #= 99 + + $ rescript_syntax -print=ml foo.res > foo.ml + + $ melc foo.ml + melc: internal error, uncaught exception: + File "jscomp/frontend/ast_exp_apply.ml", line 252, characters 17-23: Assertion failed + + [125] From 24f59f1b21d5b841b20c96a9969dc15a98c6061f Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Thu, 30 Mar 2023 14:33:45 +0000 Subject: [PATCH 02/12] test: fix dune file for gh489 --- test/dune | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/dune b/test/dune index 6de6bae406..8152657d06 100644 --- a/test/dune +++ b/test/dune @@ -7,6 +7,6 @@ (package reactjs-jsx-ppx))) (cram - (applies_to setters) + (applies_to gh489) (deps (package rescript-syntax))) From ef79a3b8cf5acc695e624bc723356234cf305838 Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Thu, 30 Mar 2023 14:58:14 +0000 Subject: [PATCH 03/12] ppx_rescript_compat: process nested pexp_send --- .../ppx_rescript_compat/ppx_rescript_compat.ml | 3 ++- test/gh489.t | 13 ++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/rescript-syntax/ppx_rescript_compat/ppx_rescript_compat.ml b/rescript-syntax/ppx_rescript_compat/ppx_rescript_compat.ml index 05109c60df..bad7dd5342 100644 --- a/rescript-syntax/ppx_rescript_compat/ppx_rescript_compat.ml +++ b/rescript-syntax/ppx_rescript_compat/ppx_rescript_compat.ml @@ -44,10 +44,11 @@ let expr_mapper (self : mapper) (expr : Parsetree.expression) = Melange_ppx.Ast_uncurry_apply.property_apply loc self obj name args; } | Pexp_send - ( ({ pexp_desc = Pexp_apply _ | Pexp_ident _; pexp_loc; _ } as subexpr), + ( ({ pexp_desc = Pexp_apply _ | Pexp_ident _ | Pexp_send _; pexp_loc; _ } as subexpr), arg ) -> (* ReScript removed the OCaml object system and abuses `Pexp_send` for `obj##property`. Here, we make that conversion. *) + let subexpr = self.expr self subexpr in { expr with pexp_desc = diff --git a/test/gh489.t b/test/gh489.t index 4872ae23cb..cf6a8f32b7 100644 --- a/test/gh489.t +++ b/test/gh489.t @@ -27,12 +27,15 @@ Now let's try with ReScript syntax type nonrec person = < age: int [@set ] > Js.t type nonrec entry = < person: person [@set ] > Js.t external entry : entry = "entry"[@@val ] - ;;(entry ## person)#age #= 99 + ;;((entry ## person) ## age) #= 99 $ rescript_syntax -print=ml foo.res > foo.ml $ melc foo.ml - melc: internal error, uncaught exception: - File "jscomp/frontend/ast_exp_apply.ml", line 252, characters 17-23: Assertion failed - - [125] + // Generated by Melange + 'use strict'; + + + entry.person.age = 99; + + /* Not a pure module */ From f550ed977e67e35b8e5177365cdfb152d177fa09 Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Tue, 11 Apr 2023 13:14:33 +0000 Subject: [PATCH 04/12] test: add rescript-syntax to gh489 --- Makefile | 2 +- test/dune | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d62c43c809..8302e510ea 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ dev: .PHONY: test test: - opam exec -- dune runtest -p melange,reactjs-jsx-ppx + opam exec -- dune runtest -p melange,rescript-syntax,reactjs-jsx-ppx .PHONY: opam-create-switch opam-create-switch: ## Create opam switch diff --git a/test/dune b/test/dune index 8152657d06..567d4cb9f0 100644 --- a/test/dune +++ b/test/dune @@ -7,6 +7,7 @@ (package reactjs-jsx-ppx))) (cram + (package rescript-syntax) (applies_to gh489) (deps (package rescript-syntax))) From 44bc6f79d9ce9e83b6c66800f138ab8268d63998 Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Tue, 11 Apr 2023 18:59:22 +0000 Subject: [PATCH 05/12] add applies_to --- test/dune | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/dune b/test/dune index 567d4cb9f0..2f97d40b66 100644 --- a/test/dune +++ b/test/dune @@ -1,5 +1,6 @@ (cram (package melange) + (applies_to * \ gh489) (deps (env_var MELANGE_LIB) setup.sh @@ -10,4 +11,5 @@ (package rescript-syntax) (applies_to gh489) (deps + (package melange) (package rescript-syntax))) From ff9a0c5b15cc31824e4874018cd34e4e1744c31b Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Tue, 11 Apr 2023 19:24:15 +0000 Subject: [PATCH 06/12] disable rescript-syntax tests --- Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 8302e510ea..f7a40fd43b 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,9 @@ dev: .PHONY: test test: - opam exec -- dune runtest -p melange,rescript-syntax,reactjs-jsx-ppx + opam exec -- dune runtest -p melange,reactjs-jsx-ppx + # rescript-syntax tests temporarily disabled, see https://github.com/ocaml/dune/pull/7220 + # opam exec -- dune runtest -p rescript-syntax .PHONY: opam-create-switch opam-create-switch: ## Create opam switch @@ -34,7 +36,7 @@ opam-install-test: ## Install test dependencies opam pin add reactjs-jsx-ppx.dev . --with-test -y opam pin add melange.dev . --with-test -y opam pin add mel.dev . --with-test -y - opam pin add rescript-syntax.dev . --with-test -y + opam pin add rescript-syntax.dev . -y #--with-test temporarily disabled, see https://github.com/ocaml/dune/pull/7220 .PHONY: opam-install-dev opam-install-dev: opam-install-test ## Install development dependencies From e2073f8191fc150d7d8399f5b635d262d405481c Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Tue, 11 Apr 2023 19:33:14 +0000 Subject: [PATCH 07/12] add rescript-syntax test to melange package --- .github/workflows/opam-build.yml | 4 ++++ Makefile | 8 +++----- test/dune | 9 +-------- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/.github/workflows/opam-build.yml b/.github/workflows/opam-build.yml index 19d8df0226..ca71982b75 100644 --- a/.github/workflows/opam-build.yml +++ b/.github/workflows/opam-build.yml @@ -56,6 +56,10 @@ jobs: opam update make opam-install-test + - name: Run tests + working-directory: melange + run: make test + - name: Clone melange-opam-template run: | git clone https://github.com/melange-re/melange-opam-template.git diff --git a/Makefile b/Makefile index f7a40fd43b..2d490722e4 100644 --- a/Makefile +++ b/Makefile @@ -21,9 +21,7 @@ dev: .PHONY: test test: - opam exec -- dune runtest -p melange,reactjs-jsx-ppx - # rescript-syntax tests temporarily disabled, see https://github.com/ocaml/dune/pull/7220 - # opam exec -- dune runtest -p rescript-syntax + opam exec -- dune runtest -p melange,reactjs-jsx-ppx,rescript-syntax .PHONY: opam-create-switch opam-create-switch: ## Create opam switch @@ -33,8 +31,8 @@ opam-create-switch: ## Create opam switch opam-install-test: ## Install test dependencies opam pin -y add dune.dev https://github.com/ocaml/dune.git#258058c6803525261df9d330d9eca2a4b0a8adc2 opam pin -y add melange-compiler-libs.dev https://github.com/melange-re/melange-compiler-libs.git#7263bea2285499f5da857f2bb374345a5178791e - opam pin add reactjs-jsx-ppx.dev . --with-test -y - opam pin add melange.dev . --with-test -y + opam pin add reactjs-jsx-ppx.dev . -y #--with-test temporarily disabled, see https://github.com/ocaml/dune/pull/7220 + opam pin add melange.dev . -y #--with-test temporarily disabled, see https://github.com/ocaml/dune/pull/7220 opam pin add mel.dev . --with-test -y opam pin add rescript-syntax.dev . -y #--with-test temporarily disabled, see https://github.com/ocaml/dune/pull/7220 diff --git a/test/dune b/test/dune index 2f97d40b66..e932790229 100644 --- a/test/dune +++ b/test/dune @@ -1,15 +1,8 @@ (cram (package melange) - (applies_to * \ gh489) (deps (env_var MELANGE_LIB) setup.sh (package melange) - (package reactjs-jsx-ppx))) - -(cram - (package rescript-syntax) - (applies_to gh489) - (deps - (package melange) + (package reactjs-jsx-ppx) (package rescript-syntax))) From b30068d8d1137e326316041edc3f134bf20324d9 Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Wed, 12 Apr 2023 14:38:44 +0000 Subject: [PATCH 08/12] Revert "add rescript-syntax test to melange package" This reverts commit e2073f8191fc150d7d8399f5b635d262d405481c. --- .github/workflows/opam-build.yml | 4 ---- Makefile | 8 +++++--- test/dune | 9 ++++++++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/.github/workflows/opam-build.yml b/.github/workflows/opam-build.yml index ca71982b75..19d8df0226 100644 --- a/.github/workflows/opam-build.yml +++ b/.github/workflows/opam-build.yml @@ -56,10 +56,6 @@ jobs: opam update make opam-install-test - - name: Run tests - working-directory: melange - run: make test - - name: Clone melange-opam-template run: | git clone https://github.com/melange-re/melange-opam-template.git diff --git a/Makefile b/Makefile index 2d490722e4..f7a40fd43b 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,9 @@ dev: .PHONY: test test: - opam exec -- dune runtest -p melange,reactjs-jsx-ppx,rescript-syntax + opam exec -- dune runtest -p melange,reactjs-jsx-ppx + # rescript-syntax tests temporarily disabled, see https://github.com/ocaml/dune/pull/7220 + # opam exec -- dune runtest -p rescript-syntax .PHONY: opam-create-switch opam-create-switch: ## Create opam switch @@ -31,8 +33,8 @@ opam-create-switch: ## Create opam switch opam-install-test: ## Install test dependencies opam pin -y add dune.dev https://github.com/ocaml/dune.git#258058c6803525261df9d330d9eca2a4b0a8adc2 opam pin -y add melange-compiler-libs.dev https://github.com/melange-re/melange-compiler-libs.git#7263bea2285499f5da857f2bb374345a5178791e - opam pin add reactjs-jsx-ppx.dev . -y #--with-test temporarily disabled, see https://github.com/ocaml/dune/pull/7220 - opam pin add melange.dev . -y #--with-test temporarily disabled, see https://github.com/ocaml/dune/pull/7220 + opam pin add reactjs-jsx-ppx.dev . --with-test -y + opam pin add melange.dev . --with-test -y opam pin add mel.dev . --with-test -y opam pin add rescript-syntax.dev . -y #--with-test temporarily disabled, see https://github.com/ocaml/dune/pull/7220 diff --git a/test/dune b/test/dune index e932790229..2f97d40b66 100644 --- a/test/dune +++ b/test/dune @@ -1,8 +1,15 @@ (cram (package melange) + (applies_to * \ gh489) (deps (env_var MELANGE_LIB) setup.sh (package melange) - (package reactjs-jsx-ppx) + (package reactjs-jsx-ppx))) + +(cram + (package rescript-syntax) + (applies_to gh489) + (deps + (package melange) (package rescript-syntax))) From 62f8dc2aa2860d54b6a1cb7807d978ad52075f34 Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Wed, 12 Apr 2023 14:59:09 +0000 Subject: [PATCH 09/12] fix rescript-syntax tests --- Makefile | 6 ++---- rescript-syntax.opam | 3 ++- rescript-syntax.opam.template | 15 +++++++++++++++ test/dune | 8 -------- test/rescript-syntax/dune | 6 ++++++ test/{ => rescript-syntax}/gh489.t | 0 test/rescript-syntax/setup.sh | 4 ++++ 7 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 rescript-syntax.opam.template create mode 100644 test/rescript-syntax/dune rename test/{ => rescript-syntax}/gh489.t (100%) create mode 100755 test/rescript-syntax/setup.sh diff --git a/Makefile b/Makefile index f7a40fd43b..8302e510ea 100644 --- a/Makefile +++ b/Makefile @@ -21,9 +21,7 @@ dev: .PHONY: test test: - opam exec -- dune runtest -p melange,reactjs-jsx-ppx - # rescript-syntax tests temporarily disabled, see https://github.com/ocaml/dune/pull/7220 - # opam exec -- dune runtest -p rescript-syntax + opam exec -- dune runtest -p melange,rescript-syntax,reactjs-jsx-ppx .PHONY: opam-create-switch opam-create-switch: ## Create opam switch @@ -36,7 +34,7 @@ opam-install-test: ## Install test dependencies opam pin add reactjs-jsx-ppx.dev . --with-test -y opam pin add melange.dev . --with-test -y opam pin add mel.dev . --with-test -y - opam pin add rescript-syntax.dev . -y #--with-test temporarily disabled, see https://github.com/ocaml/dune/pull/7220 + opam pin add rescript-syntax.dev . --with-test -y .PHONY: opam-install-dev opam-install-dev: opam-install-test ## Install development dependencies diff --git a/rescript-syntax.opam b/rescript-syntax.opam index 13756c8946..22b061b147 100644 --- a/rescript-syntax.opam +++ b/rescript-syntax.opam @@ -13,12 +13,14 @@ depends: [ "ocaml-migrate-parsetree" {>= "2.3.0"} "odoc" {with-doc} ] +dev-repo: "git+https://github.com/melange-re/melange.git" build: [ ["dune" "subst"] {dev} [ "dune" "build" "-p" + "melange" # Need to include "melange" because of https://github.com/ocaml/dune/pull/7220 name "-j" jobs @@ -27,4 +29,3 @@ build: [ "@doc" {with-doc} ] ] -dev-repo: "git+https://github.com/melange-re/melange.git" diff --git a/rescript-syntax.opam.template b/rescript-syntax.opam.template new file mode 100644 index 0000000000..8e96964947 --- /dev/null +++ b/rescript-syntax.opam.template @@ -0,0 +1,15 @@ +build: [ + ["dune" "subst"] {dev} + [ + "dune" + "build" + "-p" + "melange" # Need to include "melange" because of https://github.com/ocaml/dune/pull/7220 + name + "-j" + jobs + "@install" + "@runtest" {with-test} + "@doc" {with-doc} + ] +] diff --git a/test/dune b/test/dune index 2f97d40b66..87a6a8adfe 100644 --- a/test/dune +++ b/test/dune @@ -1,15 +1,7 @@ (cram (package melange) - (applies_to * \ gh489) (deps (env_var MELANGE_LIB) setup.sh (package melange) (package reactjs-jsx-ppx))) - -(cram - (package rescript-syntax) - (applies_to gh489) - (deps - (package melange) - (package rescript-syntax))) diff --git a/test/rescript-syntax/dune b/test/rescript-syntax/dune new file mode 100644 index 0000000000..3456fa2621 --- /dev/null +++ b/test/rescript-syntax/dune @@ -0,0 +1,6 @@ +(cram + (package rescript-syntax) + (deps + setup.sh + (package melange) + (package rescript-syntax))) diff --git a/test/gh489.t b/test/rescript-syntax/gh489.t similarity index 100% rename from test/gh489.t rename to test/rescript-syntax/gh489.t diff --git a/test/rescript-syntax/setup.sh b/test/rescript-syntax/setup.sh new file mode 100755 index 0000000000..1764c07910 --- /dev/null +++ b/test/rescript-syntax/setup.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +export MELANGELIB="$INSIDE_DUNE/jscomp/runtime/.runtime.objs/melange:$INSIDE_DUNE/jscomp/others/.belt.objs/melange:$INSIDE_DUNE/jscomp/stdlib-412/.stdlib.objs/melange" + From b0e9e734ddb319a33df0417d037494504bffcf09 Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Wed, 12 Apr 2023 15:05:14 +0000 Subject: [PATCH 10/12] cleanup --- rescript-syntax.opam | 3 +-- rescript-syntax.opam.template | 15 --------------- test/rescript-syntax/dune | 3 +-- test/rescript-syntax/gh489.t | 1 - test/rescript-syntax/setup.sh | 4 ---- 5 files changed, 2 insertions(+), 24 deletions(-) delete mode 100644 rescript-syntax.opam.template delete mode 100755 test/rescript-syntax/setup.sh diff --git a/rescript-syntax.opam b/rescript-syntax.opam index 22b061b147..13756c8946 100644 --- a/rescript-syntax.opam +++ b/rescript-syntax.opam @@ -13,14 +13,12 @@ depends: [ "ocaml-migrate-parsetree" {>= "2.3.0"} "odoc" {with-doc} ] -dev-repo: "git+https://github.com/melange-re/melange.git" build: [ ["dune" "subst"] {dev} [ "dune" "build" "-p" - "melange" # Need to include "melange" because of https://github.com/ocaml/dune/pull/7220 name "-j" jobs @@ -29,3 +27,4 @@ build: [ "@doc" {with-doc} ] ] +dev-repo: "git+https://github.com/melange-re/melange.git" diff --git a/rescript-syntax.opam.template b/rescript-syntax.opam.template deleted file mode 100644 index 8e96964947..0000000000 --- a/rescript-syntax.opam.template +++ /dev/null @@ -1,15 +0,0 @@ -build: [ - ["dune" "subst"] {dev} - [ - "dune" - "build" - "-p" - "melange" # Need to include "melange" because of https://github.com/ocaml/dune/pull/7220 - name - "-j" - jobs - "@install" - "@runtest" {with-test} - "@doc" {with-doc} - ] -] diff --git a/test/rescript-syntax/dune b/test/rescript-syntax/dune index 3456fa2621..44d7ad5083 100644 --- a/test/rescript-syntax/dune +++ b/test/rescript-syntax/dune @@ -1,6 +1,5 @@ (cram (package rescript-syntax) (deps - setup.sh - (package melange) + %{bin:melc} (package rescript-syntax))) diff --git a/test/rescript-syntax/gh489.t b/test/rescript-syntax/gh489.t index cf6a8f32b7..542d50862f 100644 --- a/test/rescript-syntax/gh489.t +++ b/test/rescript-syntax/gh489.t @@ -1,6 +1,5 @@ Repro for GitHub issue 489, first try setting values in nested objects with OCaml syntax - $ . ./setup.sh $ cat > foo.ml < type person = < age :int [@bs.set ] > Js.t > type entry = < person :person [@bs.set ] > Js.t diff --git a/test/rescript-syntax/setup.sh b/test/rescript-syntax/setup.sh deleted file mode 100755 index 1764c07910..0000000000 --- a/test/rescript-syntax/setup.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -export MELANGELIB="$INSIDE_DUNE/jscomp/runtime/.runtime.objs/melange:$INSIDE_DUNE/jscomp/others/.belt.objs/melange:$INSIDE_DUNE/jscomp/stdlib-412/.stdlib.objs/melange" - From 14f37c193ce28770f5068729443e85e0a9ae8743 Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Wed, 12 Apr 2023 15:19:42 +0000 Subject: [PATCH 11/12] more cleanup --- Makefile | 2 +- test/rescript-syntax/dune | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 8302e510ea..3f40ba8b4f 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ dev: .PHONY: test test: - opam exec -- dune runtest -p melange,rescript-syntax,reactjs-jsx-ppx + opam exec -- dune runtest -p melange,reactjs-jsx-ppx,rescript-syntax .PHONY: opam-create-switch opam-create-switch: ## Create opam switch diff --git a/test/rescript-syntax/dune b/test/rescript-syntax/dune index 44d7ad5083..69d36bd3ec 100644 --- a/test/rescript-syntax/dune +++ b/test/rescript-syntax/dune @@ -1,5 +1,3 @@ (cram (package rescript-syntax) - (deps - %{bin:melc} - (package rescript-syntax))) + (deps %{bin:melc} %{bin:rescript_syntax})) From 2ca2df93982008272d58b47b4e2c9aa3fb6890cd Mon Sep 17 00:00:00 2001 From: Javier Chavarri Date: Fri, 5 May 2023 13:36:51 +0000 Subject: [PATCH 12/12] add one more level to rescript test --- test/rescript-syntax/gh489.t | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/test/rescript-syntax/gh489.t b/test/rescript-syntax/gh489.t index 542d50862f..27ab2ed014 100644 --- a/test/rescript-syntax/gh489.t +++ b/test/rescript-syntax/gh489.t @@ -20,13 +20,15 @@ Now let's try with ReScript syntax $ cat > foo.res < type person = {@set "age": int} > type entry = {@set "person": person} - > @val external entry: entry = "entry" - > entry["person"]["age"] = 99 + > type deep = {@set "deep": entry} + > @val external deep: deep = "deep" + > deep["deep"]["person"]["age"] = 99 $ rescript_syntax -print=ml foo.res type nonrec person = < age: int [@set ] > Js.t type nonrec entry = < person: person [@set ] > Js.t - external entry : entry = "entry"[@@val ] - ;;((entry ## person) ## age) #= 99 + type nonrec deep = < deep: entry [@set ] > Js.t + external deep : deep = "deep"[@@val ] + ;;(((deep ## deep) ## person) ## age) #= 99 $ rescript_syntax -print=ml foo.res > foo.ml @@ -35,6 +37,6 @@ Now let's try with ReScript syntax 'use strict'; - entry.person.age = 99; + deep.deep.person.age = 99; /* Not a pure module */