updates transcripts

This commit is contained in:
rlmark 2021-08-23 14:05:37 -07:00
parent 51e2ea0898
commit 79ad0fa8df
22 changed files with 85 additions and 81 deletions

View File

@ -10,8 +10,8 @@ Let's set up some definitions to start:
x = 1 x = 1
y = 2 y = 2
type X = One Nat structural type X = One Nat
type Y = Two Nat Nat structural type Y = Two Nat Nat
``` ```
Expected: `x` and `y`, `X`, and `Y` exist as above. UCM tells you this. Expected: `x` and `y`, `X`, and `Y` exist as above. UCM tells you this.
@ -25,7 +25,7 @@ Let's add an alias for `1` and `One`:
```unison ```unison
z = 1 z = 1
type Z = One Nat structural type Z = One Nat
``` ```
Expected: `z` is now `1`. UCM tells you that this definition is also called `x`. Expected: `z` is now `1`. UCM tells you that this definition is also called `x`.
@ -39,7 +39,7 @@ Let's update something that has an alias (to a value that doesn't have a name al
```unison ```unison
x = 3 x = 3
type X = Three Nat Nat Nat structural type X = Three Nat Nat Nat
``` ```
Expected: `x` is now `3` and `X` has constructor `Three`. UCM tells you the old definitions were also called `z` and `Z` and these names have also been updated. Expected: `x` is now `3` and `X` has constructor `Three`. UCM tells you the old definitions were also called `z` and `Z` and these names have also been updated.
@ -52,7 +52,7 @@ Update it to something that already exists with a different name:
```unison ```unison
x = 2 x = 2
type X = Two Nat Nat structural type X = Two Nat Nat
``` ```
Expected: `x` is now `2` and `X` is `Two`. UCM says the old definition was also named `z/Z`, and was also updated. And it says the new definition is also named `y/Y`. Expected: `x` is now `2` and `X` is `Two`. UCM says the old definition was also named `z/Z`, and was also updated. And it says the new definition is also named `y/Y`.

View File

@ -6,8 +6,8 @@ Let's set up some definitions to start:
x = 1 x = 1
y = 2 y = 2
type X = One Nat structural type X = One Nat
type Y = Two Nat Nat structural type Y = Two Nat Nat
``` ```
```ucm ```ucm
@ -18,8 +18,8 @@ type Y = Two Nat Nat
⍟ These new definitions are ok to `add`: ⍟ These new definitions are ok to `add`:
type X structural type X
type Y structural type Y
x : Nat x : Nat
y : Nat y : Nat
@ -33,8 +33,8 @@ Expected: `x` and `y`, `X`, and `Y` exist as above. UCM tells you this.
⍟ I've added these definitions: ⍟ I've added these definitions:
type X structural type X
type Y structural type Y
x : Nat x : Nat
y : Nat y : Nat
@ -44,7 +44,7 @@ Let's add an alias for `1` and `One`:
```unison ```unison
z = 1 z = 1
type Z = One Nat structural type Z = One Nat
``` ```
```ucm ```ucm
@ -55,7 +55,7 @@ type Z = One Nat
⍟ These new definitions are ok to `add`: ⍟ These new definitions are ok to `add`:
type Z structural type Z
(also named X) (also named X)
z : Nat z : Nat
(also named x) (also named x)
@ -69,7 +69,7 @@ Also, `Z` is an alias for `X`.
⍟ I've added these definitions: ⍟ I've added these definitions:
type Z structural type Z
(also named X) (also named X)
z : Nat z : Nat
(also named x) (also named x)
@ -79,7 +79,7 @@ Let's update something that has an alias (to a value that doesn't have a name al
```unison ```unison
x = 3 x = 3
type X = Three Nat Nat Nat structural type X = Three Nat Nat Nat
``` ```
```ucm ```ucm
@ -91,7 +91,7 @@ type X = Three Nat Nat Nat
⍟ These names already exist. You can `update` them to your ⍟ These names already exist. You can `update` them to your
new definition: new definition:
type X structural type X
(The old definition is also named Z. I'll update this (The old definition is also named Z. I'll update this
name too.) name too.)
x : Nat x : Nat
@ -106,7 +106,7 @@ Expected: `x` is now `3` and `X` has constructor `Three`. UCM tells you the old
⍟ I've updated these names to your new definition: ⍟ I've updated these names to your new definition:
type X structural type X
(The old definition was also named Z. I updated this name (The old definition was also named Z. I updated this name
too.) too.)
x : Nat x : Nat
@ -118,7 +118,7 @@ Update it to something that already exists with a different name:
```unison ```unison
x = 2 x = 2
type X = Two Nat Nat structural type X = Two Nat Nat
``` ```
```ucm ```ucm
@ -130,7 +130,7 @@ type X = Two Nat Nat
⍟ These names already exist. You can `update` them to your ⍟ These names already exist. You can `update` them to your
new definition: new definition:
type X structural type X
(The old definition is also named Z. I'll update this (The old definition is also named Z. I'll update this
name too.) name too.)
(The new definition is already named Y as well.) (The new definition is already named Y as well.)
@ -147,7 +147,7 @@ Expected: `x` is now `2` and `X` is `Two`. UCM says the old definition was also
⍟ I've updated these names to your new definition: ⍟ I've updated these names to your new definition:
type X structural type X
(The old definition was also named Z. I updated this name (The old definition was also named Z. I updated this name
too.) too.)
(The new definition is already named Y as well.) (The new definition is already named Y as well.)

View File

@ -87,10 +87,10 @@ Let's try it!
64. Doc.Link : Link -> Doc 64. Doc.Link : Link -> Doc
65. Doc.Signature : Term -> Doc 65. Doc.Signature : Term -> Doc
66. Doc.Source : Link -> Doc 66. Doc.Source : Link -> Doc
67. type Either a b 67. structural type Either a b
68. Either.Left : a -> Either a b 68. Either.Left : a -> Either a b
69. Either.Right : b -> Either a b 69. Either.Right : b -> Either a b
70. ability Exception 70. structural ability Exception
71. Exception.raise : Failure ->{Exception} x 71. Exception.raise : Failure ->{Exception} x
72. builtin type Float 72. builtin type Float
73. Float.* : Float -> Float -> Float 73. Float.* : Float -> Float -> Float
@ -402,11 +402,11 @@ Let's try it!
312. Nat.toText : Nat -> Text 312. Nat.toText : Nat -> Text
313. Nat.trailingZeros : Nat -> Nat 313. Nat.trailingZeros : Nat -> Nat
314. Nat.xor : Nat -> Nat -> Nat 314. Nat.xor : Nat -> Nat -> Nat
315. type Optional a 315. structural type Optional a
316. Optional.None : Optional a 316. Optional.None : Optional a
317. Optional.Some : a -> Optional a 317. Optional.Some : a -> Optional a
318. builtin type Request 318. builtin type Request
319. type SeqView a b 319. structural type SeqView a b
320. SeqView.VElem : a -> b -> SeqView a b 320. SeqView.VElem : a -> b -> SeqView a b
321. SeqView.VEmpty : SeqView a b 321. SeqView.VEmpty : SeqView a b
322. unique type Test.Result 322. unique type Test.Result
@ -432,9 +432,9 @@ Let's try it!
342. Text.uncons : Text -> Optional (Char, Text) 342. Text.uncons : Text -> Optional (Char, Text)
343. Text.unsnoc : Text -> Optional (Text, Char) 343. Text.unsnoc : Text -> Optional (Text, Char)
344. todo : a -> b 344. todo : a -> b
345. type Tuple a b 345. structural type Tuple a b
346. Tuple.Cons : a -> b -> Tuple a b 346. Tuple.Cons : a -> b -> Tuple a b
347. type Unit 347. structural type Unit
348. Unit.Unit : () 348. Unit.Unit : ()
349. Universal.< : a -> a -> Boolean 349. Universal.< : a -> a -> Boolean
350. Universal.<= : a -> a -> Boolean 350. Universal.<= : a -> a -> Boolean

View File

@ -10,8 +10,8 @@ Let's set up some definitions to start:
x = 1 x = 1
y = 2 y = 2
type X = One Nat structural type X = One Nat
type Y = Two Nat Nat structural type Y = Two Nat Nat
``` ```
```ucm ```ucm

View File

@ -18,7 +18,7 @@ unambiguous type.
```unison:hide ```unison:hide
foo = 1 foo = 1
type Foo = Foo Nat structural type Foo = Foo Nat
``` ```
```ucm ```ucm
@ -60,7 +60,7 @@ A delete should remove both versions of the term.
Let's repeat all that on a type, for completeness. Let's repeat all that on a type, for completeness.
```unison:hide ```unison:hide
type Foo = Foo Nat structural type Foo = Foo Nat
``` ```
```ucm ```ucm
@ -68,7 +68,7 @@ type Foo = Foo Nat
``` ```
```unison:hide ```unison:hide
type Foo = Foo Boolean structural type Foo = Foo Boolean
``` ```
```ucm ```ucm
@ -88,7 +88,7 @@ Finally, let's try to delete a term and a type with the same name.
```unison:hide ```unison:hide
foo = 1 foo = 1
type foo = Foo Nat structural type foo = Foo Nat
``` ```
```ucm ```ucm

View File

@ -18,7 +18,7 @@ unambiguous type.
```unison ```unison
foo = 1 foo = 1
type Foo = Foo Nat structural type Foo = Foo Nat
``` ```
```ucm ```ucm
@ -26,7 +26,7 @@ type Foo = Foo Nat
⍟ I've added these definitions: ⍟ I've added these definitions:
type Foo structural type Foo
foo : Nat foo : Nat
.> delete foo .> delete foo
@ -41,7 +41,7 @@ type Foo = Foo Nat
Removed definitions: Removed definitions:
1. type Foo 1. structural type Foo
Tip: You can use `undo` or `reflog` to undo this change. Tip: You can use `undo` or `reflog` to undo this change.
@ -128,7 +128,7 @@ A delete should remove both versions of the term.
Let's repeat all that on a type, for completeness. Let's repeat all that on a type, for completeness.
```unison ```unison
type Foo = Foo Nat structural type Foo = Foo Nat
``` ```
```ucm ```ucm
@ -136,11 +136,11 @@ type Foo = Foo Nat
⍟ I've added these definitions: ⍟ I've added these definitions:
type Foo structural type Foo
``` ```
```unison ```unison
type Foo = Foo Boolean structural type Foo = Foo Boolean
``` ```
```ucm ```ucm
@ -148,7 +148,7 @@ type Foo = Foo Boolean
⍟ I've added these definitions: ⍟ I've added these definitions:
type Foo structural type Foo
.a> merge .b .a> merge .b
@ -157,12 +157,12 @@ type Foo = Foo Boolean
New name conflicts: New name conflicts:
1. type Foo#d97e0jhkmd 1. structural type Foo#d97e0jhkmd
2. ┌ type Foo#d97e0jhkmd 2. ┌ structural type Foo#d97e0jhkmd
3. └ type Foo#gq9inhvg9h 3. └ structural type Foo#gq9inhvg9h
4. Foo.Foo#d97e0jhkmd#0 : Nat -> Foo#d97e0jhkmd 4. Foo.Foo#d97e0jhkmd#0 : Nat -> Foo#d97e0jhkmd
@ -181,7 +181,7 @@ type Foo = Foo Boolean
Removed definitions: Removed definitions:
1. type a.Foo#d97e0jhkmd 1. structural type a.Foo#d97e0jhkmd
Name changes: Name changes:
@ -212,7 +212,7 @@ Finally, let's try to delete a term and a type with the same name.
```unison ```unison
foo = 1 foo = 1
type foo = Foo Nat structural type foo = Foo Nat
``` ```
```ucm ```ucm
@ -220,7 +220,7 @@ type foo = Foo Nat
⍟ I've added these definitions: ⍟ I've added these definitions:
type foo structural type foo
foo : Nat foo : Nat
``` ```
@ -229,7 +229,7 @@ type foo = Foo Nat
Removed definitions: Removed definitions:
1. type foo 1. structural type foo
2. foo : Nat 2. foo : Nat
Tip: You can use `undo` or `reflog` to undo this change. Tip: You can use `undo` or `reflog` to undo this change.

View File

@ -7,12 +7,12 @@ I can use `debug.file` to see the hashes of the last typechecked file.
Given this .u file: Given this .u file:
```unison:hide ```unison:hide
type outside.A = A Nat outside.B structural type outside.A = A Nat outside.B
type outside.B = B Int structural type outside.B = B Int
outside.c = 3 outside.c = 3
outside.d = c < (p + 1) outside.d = c < (p + 1)
type inside.M = M outside.A structural type inside.M = M outside.A
inside.p = c inside.p = c
inside.q x = x + p * p inside.q x = x + p * p
inside.r = d inside.r = d
@ -35,4 +35,4 @@ But wait, there's more. I can check the dependencies and dependents of a defini
.> .>
``` ```
We don't have an index for dependents of constructors, but iirc if you ask for that, it will show you dependents of the type that provided the constructor. We don't have an index for dependents of constructors, but iirc if you ask for that, it will show you dependents of the structural type that provided the constructor.

View File

@ -3,12 +3,12 @@ I can use `debug.file` to see the hashes of the last typechecked file.
Given this .u file: Given this .u file:
```unison ```unison
type outside.A = A Nat outside.B structural type outside.A = A Nat outside.B
type outside.B = B Int structural type outside.B = B Int
outside.c = 3 outside.c = 3
outside.d = c < (p + 1) outside.d = c < (p + 1)
type inside.M = M outside.A structural type inside.M = M outside.A
inside.p = c inside.p = c
inside.q x = x + p * p inside.q x = x + p * p
inside.r = d inside.r = d
@ -36,9 +36,9 @@ But wait, there's more. I can check the dependencies and dependents of a defini
⍟ I've added these definitions: ⍟ I've added these definitions:
type inside.M structural type inside.M
type outside.A structural type outside.A
type outside.B structural type outside.B
inside.p : Nat inside.p : Nat
inside.q : Nat -> Nat inside.q : Nat -> Nat
inside.r : Boolean inside.r : Boolean
@ -90,4 +90,4 @@ But wait, there's more. I can check the dependencies and dependents of a defini
1. #im2kiu2hmn inside.r 1. #im2kiu2hmn inside.r
``` ```
We don't have an index for dependents of constructors, but iirc if you ask for that, it will show you dependents of the type that provided the constructor. We don't have an index for dependents of constructors, but iirc if you ask for that, it will show you dependents of the structural type that provided the constructor.

View File

@ -10,7 +10,7 @@ Unison documentation is written in Unison. Documentation is a value of the follo
.> view builtin.Doc .> view builtin.Doc
``` ```
You can create these `Doc` values with ordinary code, or you can use the special syntax. A value of type `Doc` can be created via syntax like: You can create these `Doc` values with ordinary code, or you can use the special syntax. A value of structural type `Doc` can be created via syntax like:
```unison ```unison
use .builtin use .builtin

View File

@ -76,9 +76,9 @@ baz bar = (bar, 42) -- here, `bar` refers to the parameter
This should also typecheck, using the local `Sun`, and not `Day.Sun` which exists in the codebase, and the local `Day`, not the codebase `Day`. This should also typecheck, using the local `Sun`, and not `Day.Sun` which exists in the codebase, and the local `Day`, not the codebase `Day`.
```unison:hide ```unison:hide
type Zoot = Zonk | Sun structural type Zoot = Zonk | Sun
type Day = Day Int structural type Day = Day Int
use Zoot Zonk use Zoot Zonk
@ -96,7 +96,7 @@ day1 = Day +1
Even though local definitions are preferred, you can refer to definitions in the codebase via any unique suffix that doesn't also exist in the file. Even though local definitions are preferred, you can refer to definitions in the codebase via any unique suffix that doesn't also exist in the file.
```unison:hide ```unison:hide
type Zoot = Zonk | Sun structural type Zoot = Zonk | Sun
use Zoot Zonk use Zoot Zonk

View File

@ -68,9 +68,9 @@ baz bar = (bar, 42) -- here, `bar` refers to the parameter
This should also typecheck, using the local `Sun`, and not `Day.Sun` which exists in the codebase, and the local `Day`, not the codebase `Day`. This should also typecheck, using the local `Sun`, and not `Day.Sun` which exists in the codebase, and the local `Day`, not the codebase `Day`.
```unison ```unison
type Zoot = Zonk | Sun structural type Zoot = Zonk | Sun
type Day = Day Int structural type Day = Day Int
use Zoot Zonk use Zoot Zonk
@ -88,7 +88,7 @@ day1 = Day +1
Even though local definitions are preferred, you can refer to definitions in the codebase via any unique suffix that doesn't also exist in the file. Even though local definitions are preferred, you can refer to definitions in the codebase via any unique suffix that doesn't also exist in the file.
```unison ```unison
type Zoot = Zonk | Sun structural type Zoot = Zonk | Sun
use Zoot Zonk use Zoot Zonk

View File

@ -19,9 +19,13 @@ dialog = Ask.provide 'zoot '("Awesome number: " ++ Nat.toText Ask.ask ++ "!")
```ucm ```ucm
The expression in red needs the {Zoot} ability, but this location does not have access to any abilities. I expected to see `structural` or `unique` at the start of
this line:
13 | dialog = Ask.provide 'zoot '("Awesome number: " ++ Nat.toText Ask.ask ++ "!") 1 | ability Ask where ask : Nat
Learn more about when to use `structural` vs `unique` in the
Unison Docs:
https://www.unisonweb.org/docs/language-reference/#unique-types
``` ```

View File

@ -1,6 +1,6 @@
```unison ```unison
type One a = One a structural type One a = One a
unique type Woot a b c = Woot a b c unique type Woot a b c = Woot a b c
unique type Z = Z unique type Z = Z

View File

@ -1,6 +1,6 @@
```unison ```unison
type One a = One a structural type One a = One a
unique type Woot a b c = Woot a b c unique type Woot a b c = Woot a b c
unique type Z = Z unique type Z = Z
@ -18,7 +18,7 @@ snoc k aN = match k with
⍟ These new definitions are ok to `add`: ⍟ These new definitions are ok to `add`:
type One a structural type One a
unique type Woot a b c unique type Woot a b c
unique type Z unique type Z
snoc : One a -> aN -> Woot (One a) (One aN) ##Nat snoc : One a -> aN -> Woot (One a) (One aN) ##Nat

View File

@ -12,7 +12,7 @@ ability'' = 90
-- this type is the same as `type Either a b = Left a | Right b` -- this type is the same as `type Either a b = Left a | Right b`
-- but with very confusing names -- but with very confusing names
-- seriously don't ever do this -- seriously don't ever do this
type type! type_ ability_ = ability' type_ | type! type_ structural type type! type_ ability_ = ability' type_ | type! type_
unique type type!!! type_ ability_ = ability' type_ | type! type_ unique type type!!! type_ ability_ = ability' type_ | type! type_
``` ```

View File

@ -12,7 +12,7 @@ ability'' = 90
-- this type is the same as `type Either a b = Left a | Right b` -- this type is the same as `type Either a b = Left a | Right b`
-- but with very confusing names -- but with very confusing names
-- seriously don't ever do this -- seriously don't ever do this
type type! type_ ability_ = ability' type_ | type! type_ structural type type! type_ ability_ = ability' type_ | type! type_
unique type type!!! type_ ability_ = ability' type_ | type! type_ unique type type!!! type_ ability_ = ability' type_ | type! type_
``` ```
@ -25,7 +25,7 @@ unique type type!!! type_ ability_ = ability' type_ | type! type_
⍟ These new definitions are ok to `add`: ⍟ These new definitions are ok to `add`:
type type! type_ ability_ structural type type! type_ ability_
unique type type!!! type_ ability_ unique type type!!! type_ ability_
ability! : ##Nat ability! : ##Nat
ability'' : ##Nat ability'' : ##Nat

View File

@ -12,7 +12,7 @@ unique type A a b c d
| C c | C c
| D d | D d
type NeedsA a b = NeedsA (A a b Nat Nat) structural type NeedsA a b = NeedsA (A a b Nat Nat)
| Zoink Text | Zoink Text
f : A Nat Nat Nat Nat -> Nat f : A Nat Nat Nat Nat -> Nat
@ -66,7 +66,7 @@ Let's do the update now, and verify that the definitions all look good and there
Here's a test of updating a record: Here's a test of updating a record:
```unison ```unison
type Rec = { uno : Nat, dos : Nat } structural type Rec = { uno : Nat, dos : Nat }
combine r = uno r + dos r combine r = uno r + dos r
``` ```
@ -76,7 +76,7 @@ combine r = uno r + dos r
``` ```
```unison ```unison
type Rec = { uno : Nat, dos : Nat, tres : Text } structural type Rec = { uno : Nat, dos : Nat, tres : Text }
``` ```
And checking that after updating this record, there's nothing `todo`: And checking that after updating this record, there's nothing `todo`:

View File

@ -73,7 +73,7 @@ it again shows the definition using the multi-argument `cases` syntax opportunis
Here's another example: Here's another example:
```unison ```unison
type B = T | F structural type B = T | F
blah = cases blah = cases
T, x -> "hi" T, x -> "hi"

View File

@ -117,7 +117,7 @@ it again shows the definition using the multi-argument `cases` syntax opportunis
Here's another example: Here's another example:
```unison ```unison
type B = T | F structural type B = T | F
blah = cases blah = cases
T, x -> "hi" T, x -> "hi"
@ -140,7 +140,7 @@ blorf = cases
⍟ These new definitions are ok to `add`: ⍟ These new definitions are ok to `add`:
type B structural type B
blah : B -> B -> Text blah : B -> B -> Text
blorf : B -> B -> B blorf : B -> B -> B

View File

@ -4,7 +4,7 @@
``` ```
```unison:hide ```unison:hide
type IntTriple = IntTriple (Int, Int, Int) structural type IntTriple = IntTriple (Int, Int, Int)
intTriple = IntTriple(+1, +1, +1) intTriple = IntTriple(+1, +1, +1)
``` ```

View File

@ -1,6 +1,6 @@
Example uses of the `names` command and output Example uses of the `names` command and output
```unison ```unison
type IntTriple = IntTriple (Int, Int, Int) structural type IntTriple = IntTriple (Int, Int, Int)
intTriple = IntTriple(+1, +1, +1) intTriple = IntTriple(+1, +1, +1)
``` ```

View File

@ -6,7 +6,7 @@ FYI, here are the `Exception` and `Failure` types:
```ucm ```ucm
.> view Exception Failure .> view Exception Failure
ability builtin.Exception where structural ability builtin.Exception where
raise : Failure ->{builtin.Exception} x raise : Failure ->{builtin.Exception} x
unique type builtin.io2.Failure unique type builtin.io2.Failure