unison/unison-src/transcripts/cycle-update-5.md
2024-06-25 11:11:07 -07:00

856 B

Not yet working: properly updating nameless implicit terms.

scratch/main> builtins.merge
inner.ping : 'Nat
inner.ping _ = !pong + 1

pong : 'Nat
pong _ = !inner.ping + 2
scratch/main> add

Here we queue up an update by saving in a namespace where inner.ping and pong both have names, but then apply the update in a namespace where only ping has a name.

inner.ping : 'Nat
inner.ping _ = !pong + 3
.inner> update.old
scratch/main> view inner.ping

The bug here is that inner.ping still refers to pong by name. But if we properly identified the nameless (in the context that the update was applied) pong as an implicit term to include in the new ping's cycle, then ping would be left referring to a nameless thing (namely, pong, but updated to refer to the new ping).