unison/unison-src/transcripts/add-run.md
2024-07-01 14:30:55 -07:00

1.7 KiB

add.run

Basic usage

scratch/main> builtins.merge
even : Nat -> Boolean
even x = if x == 0 then true else odd (drop x 1)

odd : Nat -> Boolean
odd x = if x == 0 then false else even (drop x 1)

is2even : 'Boolean
is2even = '(even 2)

it errors if there isn't a previous run

scratch/main> add.run foo
scratch/main> run is2even

it errors if the desired result name conflicts with a name in the unison file

scratch/main> add.run is2even

otherwise, the result is successfully persisted

scratch/main> add.run foo.bar.baz
scratch/main> view foo.bar.baz

It resolves references within the unison file

z b = b Nat.+ 12
y a b = a Nat.+ b Nat.+ z 10




main : '{IO, Exception} (Nat -> Nat -> Nat)
main _ = y
scratch/main> run main
scratch/main> add.run result

It resolves references within the codebase

inc : Nat -> Nat
inc x = x + 1
scratch/main> add inc
main : '(Nat -> Nat)
main _ x = inc x
scratch/main> run main
scratch/main> add.run natfoo
scratch/main> view natfoo

It captures scratch file dependencies at run time

x = 1
y = x + x
main = 'y
scratch/main> run main
x = 50

this saves 2 to xres, rather than 100

scratch/main> add.run xres
scratch/main> view xres

It fails with a message if add cannot complete cleanly

main = '5
scratch/main> run main
scratch/main> add.run xres

It works with absolute names

main = '5
scratch/main> run main
scratch/main> add.run .an.absolute.name
scratch/main> view .an.absolute.name