on master help sign in
converted udon bold syntax to markdown (*bold* -> **bold**)
commitf5969b2bfdaa2e863db51ba37dafef5494c32e48 authorJohn Franklin <jfranklin9000@gmail.com> dateFri 10 May 2019, 01:38 (7 years ago) parent015cb5e
62 files changed+381−385
concepts/arvo-vs-azimuth.md+2−2 concepts/azimuth/_index.md+2−2 concepts/azimuth/wallet.md+4−4 concepts/contributing.md+1−1 concepts/galaxies-stars-and-planets.md+3−3 concepts/technical-overview.md+3−3 getting-started/operating-a-star.md+1−1 getting-started/using-bridge.md+2−2 learn/arvo/eyre.md+6−6 learn/arvo/gall.md+12−12 learn/arvo/hall.md+4−4 learn/azimuth.md+2−2 learn/hoon/hoon-tutorial/_index.md+1−1 learn/hoon/hoon-tutorial/arms-and-cores.md+5−5 learn/hoon/hoon-tutorial/atoms-auras-and-simple-cell-types.md+10−10 learn/hoon/hoon-tutorial/cores-again.md+1−1 learn/hoon/hoon-tutorial/cores.md+2−2 learn/hoon/hoon-tutorial/gates.md+3−3 learn/hoon/hoon-tutorial/hoon-syntax.md+20−20 learn/hoon/hoon-tutorial/multi-gate-cores-and-doors.md+1−1 learn/hoon/hoon-tutorial/nouns.md+9−9 learn/hoon/hoon-tutorial/setup.md+4−4 learn/hoon/hoon-tutorial/simple-one-gate-programs.md+2−2 learn/hoon/hoon-tutorial/structures-and-complex-types.md+6−6 learn/hoon/hoon-tutorial/the-subject-and-its-legs.md+4−4 learn/hoon/hoon-tutorial/type-checking-and-type-inference.md+4−4 learn/hoon/hoon-tutorial/type-polymorphism.md+13−13 learn/hoon/style.md+12−12 learn/hoon/workbook/list.md+5−5 learn/hoon/workbook/recursion.md+2−2 learn/nock/definition.md+5−5 learn/nock/example.md+6−6 learn/nock/explanation.md+4−4 learn/vere/api.md+29−29 learn/vere/c.md+1−1 learn/vere/nouns.md+10−10 reference/hoon-expressions/advanced.md+8−8 reference/hoon-expressions/basic.md+9−9 reference/hoon-expressions/limb/_index.md+1−1 reference/hoon-expressions/limb/limb.md+3−3 reference/hoon-expressions/rune/bar.md+3−3 reference/hoon-expressions/rune/buc.md+13−13 reference/hoon-expressions/rune/cen.md+1−1 reference/hoon-expressions/rune/col.md+8−8 reference/hoon-expressions/rune/dot.md+4−4 reference/hoon-expressions/rune/ket.md+10−10 reference/hoon-expressions/rune/lus.md+5−5 reference/hoon-expressions/rune/mic.md+8−8 reference/hoon-expressions/rune/sig.md+11−11 reference/hoon-expressions/rune/tis.md+16−16 reference/hoon-expressions/rune/wut.md+19−19 reference/hoon-expressions/rune/zap.md+5−5 reference/library/2b.md+1−1 reference/library/3c.md+2−2 reference/troubleshooting.md+6−6 using/admin.md−2 using/filesystem.md+5−5 using/generators.md+8−8 using/messaging.md+2−2 using/sail.md+1−1 using/shell.md+8−8 using/udon.md+23−25
concepts/arvo-vs-azimuth.md+2−2
@@ -6,9 +6,9 @@ description = "A quick explanation of the two parallel systems that compose Urbi
66+++
77Urbit is a project, not a single computer system. It has three components: Arvo, the operating system; Azimuth, the identity system; and Aegean, the pattern for creating software experiences for individual Urbit communities. This document compares the first two.
88
9−[*Arvo*](https://github.com/urbit/arvo) is an operating system that provides the software for a personal server. These personal servers together constitute the peer-to-peer Arvo network. To make this network work on the social level, Arvo is built to work with a system of scarce and immutable identities.
9+[**Arvo**](https://github.com/urbit/arvo) is an operating system that provides the software for a personal server. These personal servers together constitute the peer-to-peer Arvo network. To make this network work on the social level, Arvo is built to work with a system of scarce and immutable identities.
1010
11−[*Azimuth*](https://github.com/urbit/azimuth) is the public-key infrastructure built to be such a system. A suite of smart-contracts on the Ethereum blockchain, Azimuth determines which Ethereum addresses own which Azimuth identities, called _points_. All point-related operations, such as transfers, are governed at this layer. But Azimuth isn't built strictly for Arvo -- it could be used as a generalized identity system for other projects.
11+[**Azimuth**](https://github.com/urbit/azimuth) is the public-key infrastructure built to be such a system. A suite of smart-contracts on the Ethereum blockchain, Azimuth determines which Ethereum addresses own which Azimuth identities, called _points_. All point-related operations, such as transfers, are governed at this layer. But Azimuth isn't built strictly for Arvo -- it could be used as a generalized identity system for other projects.
1212
1313These otherwise-parallel systems meet when you want to connect to the Arvo network. Your Arvo personal server, called your _ship_, needs to be able to prove cryptographically that it is who it says it is. This proof comes in the form of a keyfile, derived from your point, that you use to start your ship.
1414
concepts/azimuth/_index.md+2−2
@@ -12,9 +12,9 @@ The primary way to interact with Azimuth is through our [Bridge](https://github.
1212
1313Urbit is a project, not a single computer system. It has three components: Arvo, the operating system; Azimuth, the identity system; and Aegean, the pattern for creating software experiences for individual Urbit communities. Let's compare the first two.
1414
15−*Arvo* is an operating system that provides the software for a personal server. These personal servers together constitute the peer-to-peer Arvo network. To make this network work on the social level, Arvo is built to work with a system of scarce and immutable identities.
15+**Arvo** is an operating system that provides the software for a personal server. These personal servers together constitute the peer-to-peer Arvo network. To make this network work on the social level, Arvo is built to work with a system of scarce and immutable identities.
1616
17−*Azimuth* is the public-key infrastructure built to be such a system. A suite of smart-contracts on the Ethereum blockchain, Azimuth determines which Ethereum addresses own which Azimuth identities, called _points_. All point-related operations, such as transfers, are governed at this layer. But Azimuth isn't built strictly for Arvo -- it could be used as a generalized identity system for other projects.
17+**Azimuth** is the public-key infrastructure built to be such a system. A suite of smart-contracts on the Ethereum blockchain, Azimuth determines which Ethereum addresses own which Azimuth identities, called _points_. All point-related operations, such as transfers, are governed at this layer. But Azimuth isn't built strictly for Arvo -- it could be used as a generalized identity system for other projects.
1818
1919These otherwise-parallel systems meet when you want to connect to the Arvo network. Your Arvo personal server, called your _ship_, needs to be able to prove cryptographically that it is who it says it is. This proof comes in the form of a keyfile, derived from your point, that you use to start your ship.
2020
concepts/azimuth/wallet.md+4−4
@@ -5,7 +5,7 @@ template = "doc.html"
55+++
66Owners of Azimuth _points_ need safeguards that allow for the use of Urbit
77without jeopardizing cryptographic ownership of their assets. Toward this end,
8−we created the *Urbit Hierarchical Deterministic (HD) Wallet* for the storage of
8+we created the **Urbit Hierarchical Deterministic (HD) Wallet** for the storage of
99points. The Urbit HD Wallet is not one key-pair, but a system of related
1010key-pairs that each have distinct powers, from setting networking keys for
1111communicating in the Arvo network to transferring ownership of points.
@@ -40,17 +40,17 @@ child points, voting, and setting networking keys without jeopardizing the keys
4040you've designated with ownership rights. Setting proxy rights is optional, but
4141it is recommended for on-chain actions you will execute more frequently.
4242
43−- *Management Proxy*
43+- **Management Proxy**
4444
4545 Can configure or set Arvo networking keys and conduct sponsorship related
4646 operations.
4747
48−- *Voting Proxy*
48+- **Voting Proxy**
4949
5050 Galaxies only. Galaxies are the part of the galactic senate, and this means
5151 they can cast votes on new proposals including changes to the Ecliptic.
5252
53−- *Spawn Proxy*
53+- **Spawn Proxy**
5454
5555 For stars and galaxies only. Can create new child points.
5656
concepts/contributing.md+1−1
@@ -24,7 +24,7 @@ Urbit is a decentralized system, both technically and in spirit. This means that
2424
2525What we can do, and what we propose to do in this document, is define how we plan on moderating our little, but important, corner of Urbit. We define the limits of our jurisdiction as the general-purpose discussion channel `/urbit-help`, our forum, `fora` and, adjacently, the GitHub issues on any of the [official urbit repos](https://github.com/urbit).
2626
27−Our hope is that the system established here can serve as a model for other corners of Urbit. But it bears repeating: *Tlon is technically incapable of moderating the Urbit network in general*.
27+Our hope is that the system established here can serve as a model for other corners of Urbit. But it bears repeating: **Tlon is technically incapable of moderating the Urbit network in general**.
2828
2929### Use of these guidelines
3030
concepts/galaxies-stars-and-planets.md+3−3
@@ -10,7 +10,7 @@ That's why we built a system for persistent identity called [Azimuth](../arvo-vs
1010
1111An Azimuth point is a pronounceable string like `~firbyr-napbes`. It means nothing, but it's easy to remember and say out loud. `~firbyr-napbes` is actually just a 32-bit number (`3.237.967.392`, to be exact) that we turn into a human-memorable string.
1212
13−Points come in three classes: *galaxies*, *stars*, and *planets*. You can tell what class a point is in by how long its name is. The address space grows like a family tree. Galaxies are 8-bit and have names like `~mul`. Galaxies can issue 16-bit stars (`~dacpyl`), which can themselves issue 32-bit planets (`~laptel-holfur`).
13+Points come in three classes: **galaxies**, **stars**, and **planets**. You can tell what class a point is in by how long its name is. The address space grows like a family tree. Galaxies are 8-bit and have names like `~mul`. Galaxies can issue 16-bit stars (`~dacpyl`), which can themselves issue 32-bit planets (`~laptel-holfur`).
1414
1515Planets are intended for everyday use by an adult human, and there is a maximum of about 4.3 billion of them (2 to the 32nd power). Stars and galaxies, on the other hand, are meant to act as network infrastructure: in the Arvo network they provide P2P routing and distribute software updates.
1616
@@ -28,6 +28,6 @@ Planets are intended for everyday use by an adult human, and there is a maximum
2828
2929In addition to these three classes of Azimuth points, there two other kinds of Urbit identities, but they do _not_ use Azimuth.
3030
31−*Moons* are 64 bits, are issued by planets, and have names like `~doznec-salfun-naptul-habrys`. Moons are meant for connected devices: phones, smart TVs, digital thermostats. Moons are not independent, but are subordinated to their parent planet.
31+**Moons** are 64 bits, are issued by planets, and have names like `~doznec-salfun-naptul-habrys`. Moons are meant for connected devices: phones, smart TVs, digital thermostats. Moons are not independent, but are subordinated to their parent planet.
3232
33−*Comets* are 128-bit points with no parents that can be launched by anyone. They are meant for bots. Being disposable and essentially unlimited, they will likely not be trusted by the others on the Arvo network. They have enormous names, like `~racmus-mollen-fallyt-linpex--watres-sibbur-modlux-rinmex`.
33+**Comets** are 128-bit points with no parents that can be launched by anyone. They are meant for bots. Being disposable and essentially unlimited, they will likely not be trusted by the others on the Arvo network. They have enormous names, like `~racmus-mollen-fallyt-linpex--watres-sibbur-modlux-rinmex`.
concepts/technical-overview.md+3−3
@@ -53,7 +53,7 @@ there is a risk of losing functional purity; your urbit cannot _guarantee_ that
5353the side effects in question actually occur. What's the solution?
5454
5555Each urbit is
56−[sandboxed](https://en.wikipedia.org/wiki/Sandbox_(computer_security%29) in a
56+[sandboxed](https://en.wikipedia.org/wiki/Sandbox_%28computer_security%29) in a
5757virtual machine, Vere, which runs on Unix. Code running in your urbit cannot
5858make Unix system calls or otherwise directly affect the underlying platform.
5959Strictly speaking, internal urbit code can only change internal urbit state; it
@@ -154,14 +154,14 @@ licensed.
154154
155155Azimuth is a general-purpose public-key infrastructure (PKI) on the Ethereum
156156blockchain, used as a decentralized ledger for Urbit identities that we call
157−*points*. Having a point is necessary to use the Urbit network, which makes it
157+**points**. Having a point is necessary to use the Urbit network, which makes it
158158important to have a neutral ledger to determine who owns what.
159159
160160Azimuth is not, however, part of the Urbit stack. Azimuth is a parallel system
161161that be used as a generalized identity system for other projects. Azimuth
162162"touches" the Urbit ecosystem when a point is used to boot a virtual computer
163163on the Urbit network for the first time. When that happens, the point considered
164−*linked* to Azimuth and the point’s full powers are available for use. Once a
164+**linked** to Azimuth and the point’s full powers are available for use. Once a
165165point is linked, it cannot be unlinked.
166166
167167A metaphor might make the relationship between these two systems to understand:
getting-started/operating-a-star.md+1−1
@@ -11,7 +11,7 @@ Important star operations happen on both the Arvo side and the Azimuth side. On
1111
1212## Powers of a Star
1313
14−Stars are above planets in the network hierarchy in the sense that each star sponsors some number of planets: stars discover peers for planets, route packets for planets, provide DNS routing for planets, and push software updates to planets. A star that fulfills this is called the *sponsor* of planets that receive such services from the star; those planets, in turn, are called *dependents* of that star.
14+Stars are above planets in the network hierarchy in the sense that each star sponsors some number of planets: stars discover peers for planets, route packets for planets, provide DNS routing for planets, and push software updates to planets. A star that fulfills this is called the **sponsor** of planets that receive such services from the star; those planets, in turn, are called **dependents** of that star.
1515
1616Stars are also the "parents" planets. A new planet comes into existence only when spawned by a parent star. A parent planet is the sponsor of its children planets by default. This can change if a planet chooses to find a new sponsor (see the "Escaping a Sponsor" section below).
1717
getting-started/using-bridge.md+2−2
@@ -19,9 +19,9 @@ To use Bridge:
1919+ Run this command: `python3 -m http.server 5000 --bind 127.0.0.1 --directory build`
2020+ You can then use the Bridge app by navigating to `http://localhost:5000` in your internet browser.
2121
22−*Note:* Bridge allows you both make reads and writes to the Ethereum blockchain. Writing to the blockchain, such as changing your networking keys, will incur a transaction cost that will require you to have some ETH in your address.
22+**Note:** Bridge allows you both make reads and writes to the Ethereum blockchain. Writing to the blockchain, such as changing your networking keys, will incur a transaction cost that will require you to have some ETH in your address.
2323
24−Once the program is running in your browser, go through each step presented according to what kind of wallet you have. There are a few login options you'll be presented with. A notable option is *Urbit Master Ticket*. This is for those who used our Wallet Generator software. If you bought points from an Urbit sale and then used the Wallet Generator, your networking keys will be set for you. All other login options will result in you needing to set your own networking keys.
24+Once the program is running in your browser, go through each step presented according to what kind of wallet you have. There are a few login options you'll be presented with. A notable option is **Urbit Master Ticket**. This is for those who used our Wallet Generator software. If you bought points from an Urbit sale and then used the Wallet Generator, your networking keys will be set for you. All other login options will result in you needing to set your own networking keys.
2525
2626## Accept Your Transfer
2727
learn/arvo/eyre.md+6−6
@@ -429,13 +429,13 @@ To this object, `/main/lib/urb.js` adds helpers:
429429
430430When the `vere` process is re/started, a TCP port is bound, HTTP requests on which are the scope of this document. The `%born` gift informs eyre of this occurrence, which in turn updates [its state.](#bolo)
431431
432−*Gifts given in response:* none.
432+**Gifts given in response:** none.
433433
434434## `[%hiss p=mark q=cage]`, outbound http
435435
436436Userspace http request, converted by `%ford` into an actual `hiss`.
437437
438−*Gifts given in response:* a [`%sigh`]()
438+**Gifts given in response:** a [`%sigh`]()
439439
440440### 3.1 `[%this httq]`, inbound http
441441
@@ -463,7 +463,7 @@ After `r` is parsed to a `purl`, the `pork`(relative path) determines the resour
463463- `/~/of` fails if the `ixor` is unknown, and otherwise is stored in the `ixor`, receiving a partial response and all events after its [last-seen header](#). If it has a `poll` parameter, the response is full, and only occurs if the body is non-empty. Otherwise the oryx is saved as a [live](#live) request in case of cancellation.
464464- `/~/to` transforms into a [`%g` message](#mess).
465465
466−*Gifts given in response:* a [`%thou`](), or a [`%that`](#that) followed by multiple [`%thar`]()s.
466+**Gifts given in response:** a [`%thou`](), or a [`%that`](#that) followed by multiple [`%thar`]()s.
467467
468468### 3.2 `[%thud ~]`, inbound close
469469
@@ -477,13 +477,13 @@ Sent when an unresponded-to request is cancelled. The [live](#live) effect of th
477477Sent when a partial [response](#that) or [body](#thar) fails to arrive. Its `duct` is the same as that of the original request. This is handled by [waiting](#wait) for the client to reconnect, and if this not occur, unwinding all subscription state.
478478
479479
480−*Gifts given in response:* None.
480+**Gifts given in response:** None.
481481
482482### 3.4 ``[%wart sock [path *]]``, inbound message
483483
484484Sometimes, messages are received from other ships. They are expected to take the from of a [`gram`]().
485485
486−*Gifts given in response:* [`%nice` or `%mean`](#ack).
486+**Gifts given in response:** [`%nice` or `%mean`](#ack).
487487
488488<span id="gram"></span>
489489#### 3.4.1 `gram`
@@ -495,7 +495,7 @@ There are three messages of note, all concerning authentication
495495- if the session is already authorized, a reply of `[/aut ses]` from (%eyre on) a foreign ship prescribes that the session is henceforth allowed to act on its behalf. All waiting `/~/as` are resolved as successful.
496496- otherwise, `[/hat ses hart]` contains the ship's preferred hostname. This can then be used to redirect the client. All waiting `/~/as` are given `307 Redirect`s to `/~/am` on the provided host.
497497
498−*Gifts given in response:* nice?
498+**Gifts given in response:** nice?
499499
500500<span id="gift"></span>
501501## 4. Responses
learn/arvo/gall.md+12−12
@@ -670,7 +670,7 @@ Which causes `~sampel-sipnym` to print `[%receiving 'howdy']` and
670670
671671(Note: `:ping|send ~sampel-sipnym` is short for `:ping +ping/send ~sampel-sipnym`.)
672672
673−*Exercises*:
673+**Exercises**:
674674
675675- Create a generator for `:sum` from [State](#state) so that you can run `:sum|add 5` to add numbers to it.
676676
@@ -811,7 +811,7 @@ Here's the move that sends the HTTP request:
811811[ost.hid %hiss /request ~ %httr %purl (need (de-purl:html target))]
812812```
813813
814−> Remember, we are expected to produce a *list* of moves. Note the `~` after the move in the full example. This is a convenient shortcut for creating a list of a single element. It's part of a small family of such shortcuts. `~[a b c]` is `[a b c ~]`, `[a b c]~` is `[[a b c] ~]` and `\`[a b c]` is `[~ a b c]`. These may be mixed and matched to create various convoluted structures and emojis.
814+> Remember, we are expected to produce a **list** of moves. Note the `~` after the move in the full example. This is a convenient shortcut for creating a list of a single element. It's part of a small family of such shortcuts. `~[a b c]` is `[a b c ~]`, `[a b c]~` is `[[a b c] ~]` and `\`[a b c]` is `[~ a b c]`. These may be mixed and matched to create various convoluted structures and emojis.
815815
816816The correspondence between this move and `[bone card]` can be hard to
817817visualize on one line. Here it is more pedantically:
@@ -1053,7 +1053,7 @@ commands:
10531053>=
10541054```
10551055
1056−> There is currently a bug where the `[%echo %noun *]` lines are printed *above* the line you entered, so your output may not look exactly like this. `>=` means that a command was successfully received and executed.
1056+> There is currently a bug where the `[%echo %noun *]` lines are printed **above** the line you entered, so your output may not look exactly like this. `>=` means that a command was successfully received and executed.
10571057
10581058Most of the app code should be simple enough to guess its function. The
10591059important part of this code is the definition of `++poke-noun`.
@@ -1063,7 +1063,7 @@ it by sending it messages. The most straightforward way to do that is to poke it
10631063from the command line, which we we did with `:echo 5`
10641064(`:[app-name] [argument(s)]`).
10651065
1066−In this case, `++poke-noun` takes an argument (*sample*) `arg` and
1066+In this case, `++poke-noun` takes an argument (**sample**) `arg` and
10671067prints it to dojo with `~&` ([sigpad](/docs/reference/hoon-expressions/rune/sig#sigpad/)).
10681068This is an unusual rune that formally "does nothing", but the interpreter
10691069detects it and printfs the first child, before executing the second as if the
@@ -1071,8 +1071,8 @@ first didn't exist. This is a slightly hacky way of printing to the console,
10711071but we'll get to the correct way later on.
10721072
10731073But what does `++poke-noun` produce? Recall that `^-` casts to a type. In this
1074−case, it's declaring that the end result (*product*) of the function
1075−(`++poke-noun`'s *gate*) will be of type `[(list) _+>.$]`. But what does this
1074+case, it's declaring that the end result (**product**) of the function
1075+(`++poke-noun`'s **gate**) will be of type `[(list) _+>.$]`. But what does this
10761076mean?
10771077
10781078The phrase to remember is "a list of moves and our state". Urbit is a message
@@ -1154,7 +1154,7 @@ gall: %square: no poke arm for noun
11541154Marks are powerful, and they're the backbone of Urbit's data pipeline,
11551155so we'll be getting quite used to them.
11561156
1157−*Exercise*:
1157+**Exercise**:
11581158
11591159- Write an app that computes fizzbuzz on its input.
11601160
@@ -1220,7 +1220,7 @@ urbit, this output:
12201220```
12211221
12221222Most of the code should be straightforward. In `++poke-atom`, the only new thing
1223−is the expression `` `@t`tom ``, which is *casting* the argument `tom` to type
1223+is the expression `` `@t`tom ``, which is **casting** the argument `tom` to type
12241224`@t`. As we already know, `@t` is the type of "cord" (text string).
12251225
12261226The more interesting part is in `++poke-urbit`. The `urbit` mark is an urbit
@@ -1317,7 +1317,7 @@ urbit as for sending messages between apps on different urbits.
13171317
13181318> We said earlier that we're not expecting a response. This is not entirely true: the `++coup` is called when we receive acknowledgment that the `++poke` was called. We don't do anything with this information right now, but we could.
13191319
1320−*Exercises*:
1320+**Exercises**:
13211321
13221322- Extend either of the apps in the first two exercises to accept input over the network in the same way as `pong`.
13231323
@@ -1722,7 +1722,7 @@ system](https://en.wikipedia.org/wiki/ACID). Thus, you don't have to worry about
17221722persistence when programming in Urbit, or ever go through the hassle of having
17231723to set up and write to a database.
17241724
1725−*Exercises*:
1725+**Exercises**:
17261726
17271727- Modify `:sum` to reset the counter when you poke it with 0.
17281728
@@ -2200,7 +2200,7 @@ the app from the command line.
22002200>=
22012201```
22022202
2203−*Exercise*:
2203+**Exercise**:
22042204
22052205- Modify `:sink` from the subscriptions chapter to listen to `:click` and print out the subscription updates on the command line.
22062206
@@ -2313,6 +2313,6 @@ The javascript is fairly pure as well, sending and receiving json
23132313everywhere. The marks are the translation layer, and they're the
23142314only things that need to know how the hoon types map to json.
23152315
2316−*Exercise*:
2316+**Exercise**:
23172317
23182318- Open the app in multiple tabs, click the button, and verify that all the tabs stay in sink. Poke it manually from the command line and verify the tabs are updated as well.
learn/arvo/hall.md+4−4
@@ -27,7 +27,7 @@ Hall's implementation is structured according to the new Gall model. Familiarity
2727
2828Talk was Urbit's first big user-facing application. It continues to enjoy a prominent role in the Urbit landscape, but now does so as two separate applications.
2929
30−The messaging parts of Talk have been separated from its user-interface parts. What we ended up with is a shiny new generic messaging bus, and the chat interface we all know and love. The messaging bus, which should now prove useful to many different applications, will be named `Hall`. Applications that use it are referred to as *clients*. One such application, as you might have guessed, is `:talk`.
30+The messaging parts of Talk have been separated from its user-interface parts. What we ended up with is a shiny new generic messaging bus, and the chat interface we all know and love. The messaging bus, which should now prove useful to many different applications, will be named `Hall`. Applications that use it are referred to as **clients**. One such application, as you might have guessed, is `:talk`.
3131
3232
3333## Structures & functionality
@@ -895,15 +895,15 @@ You'll find that the logic relating to these two often becomes tangled, making t
895895
896896> The main significant cost of software development is the cost of untangling what the computer is doing, and or is supposed to be doing, over and over again in your head. Any way of lowering this untangling cost is extremely welcome.
897897
898−*~sorreg-namtyv*
898+**~sorreg-namtyv**
899899
900900### Solutions
901901
902−Let's imagine a world in which Gall *does* help, in both of those places.
902+Let's imagine a world in which Gall **does** help, in both of those places.
903903
904904It would be wonderful if Gall could take care of all standard subscription management logic for you, and direct the flow of code as it concludes is appropriate. Applications, then, would have to help Gall by providing the different parts of this flow, and providing the checks that allow Gall to make the right decisions. This takes some work out of the developer's hands and results in more structured application code.
905905
906−If we expand on that a bit, then we can even have Gall help us in untangling state changes from side effects. We do so by separating state changes into two phases: *analyzing* what changes need to be made, and *applying* those changes.
906+If we expand on that a bit, then we can even have Gall help us in untangling state changes from side effects. We do so by separating state changes into two phases: **analyzing** what changes need to be made, and **applying** those changes.
907907
908908But where do the side-effects go, then? We need to realize there's two kinds: side-effects that are subscription updates, and side-effects that aren't. The latter get produces by applying state changes, while the former get integrated into the Gall flow we described above.
909909
learn/azimuth.md+2−2
@@ -3,8 +3,8 @@ title = "Azimuth"
33weight = 2
44template = "doc.html"
55+++
6−Azimuth is a general-purpose public-key infrastructure (PKI) on the Ethereum blockchain, used as a decentralized ledger for Urbit identities that we call *points*. Having a point is necessary to use the Urbit network, which makes it important to have a neutral ledger to determine who owns what.
6+Azimuth is a general-purpose public-key infrastructure (PKI) on the Ethereum blockchain, used as a decentralized ledger for Urbit identities that we call **points**. Having a point is necessary to use the Urbit network, which makes it important to have a neutral ledger to determine who owns what.
77
8−Azimuth is not, however, part of the Arvo stack. Azimuth is a parallel system that be used as a generalized identity system for other projects. Azimuth "touches" the Urbit ecosystem when a point is used to boot a virtual computer on the Urbit network for the first time. When that happens, the point considered *linked* to Azimuth and the point’s full powers are available for use. Once a point is linked, it cannot be unlinked.
8+Azimuth is not, however, part of the Arvo stack. Azimuth is a parallel system that be used as a generalized identity system for other projects. Azimuth "touches" the Urbit ecosystem when a point is used to boot a virtual computer on the Urbit network for the first time. When that happens, the point considered **linked** to Azimuth and the point’s full powers are available for use. Once a point is linked, it cannot be unlinked.
99
1010A metaphor might make the relationship between these two systems easier to understand: Azimuth is the bank vault that stores the deed to your house. The Urbit network is the neighborhood that you live in.
learn/hoon/hoon-tutorial/_index.md+1−1
@@ -8,7 +8,7 @@ This series is designed to teach you Hoon without assuming you have an extensive
88
99Chapter 1 introduces and explains the fundamental concepts you need in order to understand Hoon's semantics.
1010
11−Hoon is a 'subject-oriented' programming language -- every expression of Hoon is evaluated relative to a *subject*. The subject is a piece of data that represents the environment, or the context, of an expression. After reading Chapter 1 you should understand what the subject is and how to refer to its various parts. In this chapter you'll also learn about *cores*, which are an important data structure in Hoon. Once you get the hang of cores you'll be able to write your own functions in Hoon.
11+Hoon is a 'subject-oriented' programming language -- every expression of Hoon is evaluated relative to a **subject**. The subject is a piece of data that represents the environment, or the context, of an expression. After reading Chapter 1 you should understand what the subject is and how to refer to its various parts. In this chapter you'll also learn about **cores**, which are an important data structure in Hoon. Once you get the hang of cores you'll be able to write your own functions in Hoon.
1212
1313Chapter 2 covers the basics of writing full programs in Hoon.
1414
learn/hoon/hoon-tutorial/arms-and-cores.md+5−5
@@ -11,11 +11,11 @@ After arms are defined and explained we review wing expressions, this time focus
1111
1212Arms and legs are limbs of the subject, i.e., noun fragments of the subject. In the last lesson we said that legs are for data and arms are for computations. But what _specifically_ is an arm, and how is it used for computation? Let's begin with a preliminary explanation that will be refined later in the lesson.
1313
14−An *arm* is some expression of Hoon encoded as a noun. (By 'encoded as a noun' we literally mean: 'compiled to a Nock formula'. But you don't need to know anything about Nock to understand Hoon.) You virtually never need to treat an arm as raw data, even though technically you can -- it's just a noun like any other. You virtually always want to think of an arm simply as a way of running some Hoon code.
14+An **arm** is some expression of Hoon encoded as a noun. (By 'encoded as a noun' we literally mean: 'compiled to a Nock formula'. But you don't need to know anything about Nock to understand Hoon.) You virtually never need to treat an arm as raw data, even though technically you can -- it's just a noun like any other. You virtually always want to think of an arm simply as a way of running some Hoon code.
1515
1616Every expression of Hoon is evaluated relative to a subject. What subject is the arm to be evaluated against? Answer: the parent core of that arm.
1717
18−So in order to understand fully what an arm is, you must understand what a core is. Briefly, a *core* is a cell of `[battery payload]`. The *battery* is a collection of one or more arms, and the *payload* is the data needed by the arms to evaluate correctly. (The battery is code and the payload is data for that code.) A given core is the *parent core* of all of the arms in its battery.
18+So in order to understand fully what an arm is, you must understand what a core is. Briefly, a **core** is a cell of `[battery payload]`. The **battery** is a collection of one or more arms, and the **payload** is the data needed by the arms to evaluate correctly. (The battery is code and the payload is data for that code.) A given core is the **parent core** of all of the arms in its battery.
1919
2020## Your First Core
2121
@@ -23,7 +23,7 @@ To clarify the basic idea, let's look at an example core.
2323
2424We'll make a core using a multi-line Hoon expression that is more complex than the other examples you've seen up to this point. The dojo can be used to input multi-line Hoon expressions; just type each line, hitting 'enter' or 'return' at the end. The expression will be evaluated at the appropriate line break, i.e., when the dojo recognizes it as a complete expression of Hoon.
2525
26−Use the following to bind `c` to a core. It begins with a *rune*, `|%`, which is used for creating a core. (A rune is just a pair of ASCII characters, and it usually indicates the beginning of a complex Hoon expression.) Take note of the expression spacing -- Hoon uses significant whitespace. Feel free to cut and paste the following expression into the dojo, starting with `=c`:
26+Use the following to bind `c` to a core. It begins with a **rune**, `|%`, which is used for creating a core. (A rune is just a pair of ASCII characters, and it usually indicates the beginning of a complex Hoon expression.) Take note of the expression spacing -- Hoon uses significant whitespace. Feel free to cut and paste the following expression into the dojo, starting with `=c`:
2727
2828```
2929> =c |%
@@ -60,7 +60,7 @@ The battery of the core to be produced is explicitly defined by the `|%` express
6060
6161## Cores
6262
63−Let's go over what a core is a little more carefully and comprehensively. As stated before, a *core* is a cell of a *battery* and a *payload*.
63+Let's go over what a core is a little more carefully and comprehensively. As stated before, a **core** is a cell of a **battery** and a **payload**.
6464
6565```
6666A core: [battery payload]
@@ -180,7 +180,7 @@ To reinforce your newfound understanding of arms and cores, let's go over the va
180180
181181### Address-Based Wings
182182
183−In the last lesson, you saw how the following expressions return legs based on an address in the subject: `+n`, `.`, `-`, `+`, `+>`, `+<`, `->`, `-<`, `&`, `|` etc. When these resolve to the part of the subject containing an arm, they *don't* evaluate the arm. They simply return the indicated noun fragment of the subject, as if it were a leg.
183+In the last lesson, you saw how the following expressions return legs based on an address in the subject: `+n`, `.`, `-`, `+`, `+>`, `+<`, `->`, `-<`, `&`, `|` etc. When these resolve to the part of the subject containing an arm, they **don't** evaluate the arm. They simply return the indicated noun fragment of the subject, as if it were a leg.
184184
185185Let's use `-.c` to look at the head of `c`, i.e., the battery of the core:
186186
learn/hoon/hoon-tutorial/atoms-auras-and-simple-cell-types.md+10−10
@@ -3,11 +3,11 @@ title = "Atoms, Auras, and Simple Cell Types"
33weight = 24
44template = "doc.html"
55+++
6−Like most modern high-level programming languages, Hoon has a type system. Because Hoon is a functional programming language, its type system differs somewhat from those of non-functional languages. In the next few lessons we'll go over Hoon's type system and point out some of its distinctive features. Certain advanced topics (e.g. type [polymorphism](https://en.wikipedia.org/wiki/Polymorphism_(computer_science%29)) won't be addressed until a later chapter.
6+Like most modern high-level programming languages, Hoon has a type system. Because Hoon is a functional programming language, its type system differs somewhat from those of non-functional languages. In the next few lessons we'll go over Hoon's type system and point out some of its distinctive features. Certain advanced topics (e.g. type [polymorphism](https://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29)) won't be addressed until a later chapter.
77
88A type is ordinarily understood to be a set of values. Examples: the set of all atoms is a type, the set of all cells is a type, and so on.
99
10−Type systems provide type safety, in part by making sure functions produce values of the correct type. When you write a function whose product is intended to be an atom, it would be nice to know that the function is guaranteed to produce an atom. Hoon's type system provides such guarantees with *type checking* and *type inference*.
10+Type systems provide type safety, in part by making sure functions produce values of the correct type. When you write a function whose product is intended to be an atom, it would be nice to know that the function is guaranteed to produce an atom. Hoon's type system provides such guarantees with **type checking** and **type inference**.
1111
1212## Brief Overview of the Next Few Lessons
1313
@@ -21,9 +21,9 @@ In [lesson 1.2](../nouns) we defined what an atom is: any unsigned integer. In
2121
2222In the most straightforward sense, atoms simply are unsigned integers. But they can also be interpreted as representing signed integers, ASCII symbols, floating-point values, dates, binary numbers, hexadecimal numbers, and more. Every atom is, in and of itself, just an unsigned integer; but Hoon keeps track of type information about each atom, and this info tells Hoon how to interpret the atom in question.
2323
24−The piece of type information that determines how Hoon interprets an atom is called an *aura*. The set of all atoms is indicated with the symbol `@`. An aura is indicated with `@` followed by some letters, e.g., `@ud` for unsigned decimal. Accordingly, the Hoon type system does more than track sets of values. It also tracks certain other relevant metadata about how those values are to be interpreted.
24+The piece of type information that determines how Hoon interprets an atom is called an **aura**. The set of all atoms is indicated with the symbol `@`. An aura is indicated with `@` followed by some letters, e.g., `@ud` for unsigned decimal. Accordingly, the Hoon type system does more than track sets of values. It also tracks certain other relevant metadata about how those values are to be interpreted.
2525
26−How is aura information generated so that it can be tracked? One way involves *type inference*. In certain cases Hoon's type system can infer the type of an expression using syntactic clues. In the most straightforward case of type inference, the expression is simply data as a [literal](https://en.wikipedia.org/wiki/Literal_(computer_programming%29). Hoon recognizes the aura literal syntax and infers that the data in question is an atom with the aura associated with that syntax.
26+How is aura information generated so that it can be tracked? One way involves **type inference**. In certain cases Hoon's type system can infer the type of an expression using syntactic clues. In the most straightforward case of type inference, the expression is simply data as a [literal](https://en.wikipedia.org/wiki/Literal_%28computer_programming%29). Hoon recognizes the aura literal syntax and infers that the data in question is an atom with the aura associated with that syntax.
2727
2828To see the inferred type of a literal expression in the dojo, use the `?` operator. (Note: this operator isn't part of the Hoon programming language; it's a dojo-only tool. It's a very useful tool for learning about types in Hoon, however.)
2929
@@ -171,7 +171,7 @@ The reason these add up correctly is that unsigned auras all map directly to the
171171
172172It's important to understand that Hoon's type system doesn't enforce auras as strictly as it does other types. Auras are 'soft' type information. To see how this works, we'll take you through the process of converting the aura of an atom to another aura.
173173
174−Hoon makes *some* effort to enforce that the correct aura is produced by an expression:
174+Hoon makes **some** effort to enforce that the correct aura is produced by an expression:
175175
176176```
177177> ^-(@ud 0x10)
@@ -367,7 +367,7 @@ You can get around Hoon's parser restrictions for `@ta` atoms by casting to `@ta
367367~.The quick brown fox jumped over the lazy dog.
368368```
369369
370−The Hoon *parser* prevents you from typing the literal `~.The quick brown fox jumped over the lazy dog.` into the dojo. Try it!
370+The Hoon **parser** prevents you from typing the literal `~.The quick brown fox jumped over the lazy dog.` into the dojo. Try it!
371371
372372The `@tas` aura is intended for 'symbols', i.e., kebab case strings following a `%`:
373373
@@ -489,7 +489,7 @@ Programmers can use their own auras if desired, keeping in mind however that Hoo
489489
490490If your program uses both fortnights and furlongs, Hoon will not parse a user-defined fortnight syntax. It will not print furlongs in the dojo. But the type system can prevent you from accidentally passing a furlong to a function that expects a fortnight.
491491
492−Remember also that auras specialize to the right. For example, `@u` atoms are interpreted as unsigned integers; `@ux` atoms are interpreted as unsigned *hexadecimal* integers.
492+Remember also that auras specialize to the right. For example, `@u` atoms are interpreted as unsigned integers; `@ux` atoms are interpreted as unsigned **hexadecimal** integers.
493493
494494```
495495> `@madeupaura`123
@@ -510,9 +510,9 @@ nest-fail
510510
511511## General and Constant Atoms
512512
513−There's more to the type information of an atom than its aura. Another distinction is necessary. Some atoms are *general* in type, meaning that the type in question includes all atoms. For example, the type of the literal `17` is `@ud`; every atom can be of that type. Up to this point of this lesson every atom has been general.
513+There's more to the type information of an atom than its aura. Another distinction is necessary. Some atoms are **general** in type, meaning that the type in question includes all atoms. For example, the type of the literal `17` is `@ud`; every atom can be of that type. Up to this point of this lesson every atom has been general.
514514
515−There are also atoms that are *constant* in type. Constant atom types contain just one atom. But that's not all. Constant atom types contain just one atom *with just one aura*.
515+There are also atoms that are **constant** in type. Constant atom types contain just one atom. But that's not all. Constant atom types contain just one atom **with just one aura**.
516516
517517For atomic constant literal syntax simply put `%` in front of the atom literal:
518518
@@ -693,7 +693,7 @@ nest-fail
693693nest-fail
694694```
695695
696−The `[@ @]` cast accepts any expression that evaluates to a cell with exactly two atoms, and crashes with a `nest-fail` for any expression that evaluates to something different. The expression `12` doesn't evaluate to a cell; and while the expression `[[12 13] 14]` *does* evaluate to a cell, the left-hand side isn't an atom, but is instead another cell.
696+The `[@ @]` cast accepts any expression that evaluates to a cell with exactly two atoms, and crashes with a `nest-fail` for any expression that evaluates to something different. The expression `12` doesn't evaluate to a cell; and while the expression `[[12 13] 14]` **does** evaluate to a cell, the left-hand side isn't an atom, but is instead another cell.
697697
698698You can get even more specific about the kind of cell you want by using atom auras:
699699
learn/hoon/hoon-tutorial/cores-again.md+1−1
@@ -275,7 +275,7 @@ For each random number generation, the `rng` core has a different seed number.
275275\/ \/
276276```
277277
278−`eny` is an environment value for [entropy](https://en.wikipedia.org/wiki/Entropy_(computing%29). Its value changes every time it's evaluated. We can use `eny` to produce a seed value for `rng` and retry the `=^` expression from above:
278+`eny` is an environment value for [entropy](https://en.wikipedia.org/wiki/Entropy_%28computing%29). Its value changes every time it's evaluated. We can use `eny` to produce a seed value for `rng` and retry the `=^` expression from above:
279279
280280```
281281> =rng ~(. og eny)
learn/hoon/hoon-tutorial/cores.md+2−2
@@ -182,7 +182,7 @@ Unbind `t` in the dojo subject as follows:
182182
183183### Type Constructor Arms
184184
185−`(list @)` is a type. So is `(list ^)`, `(list tape)`, `(list ?)`, etc. These are all lists of one sort or another, but they're all distinct types. You can think of `list` as a function that takes one type and returns another -- it takes, e.g., `@` and returns an atom list type. We may call `list` one kind of *type constructor*.
185+`(list @)` is a type. So is `(list ^)`, `(list tape)`, `(list ?)`, etc. These are all lists of one sort or another, but they're all distinct types. You can think of `list` as a function that takes one type and returns another -- it takes, e.g., `@` and returns an atom list type. We may call `list` one kind of **type constructor**.
186186
187187A type constructor takes one or more types, and constructs another type from them. You can define your own type constructors using core arms.
188188
@@ -223,7 +223,7 @@ Unbind `t` again:
223223
224224## Cores with Samples (Doors)
225225
226−Cores without samples are often useful, but sometimes more is desired. Sometimes you'll want to use a core with a sample. Such cores are called *doors*.
226+Cores without samples are often useful, but sometimes more is desired. Sometimes you'll want to use a core with a sample. Such cores are called **doors**.
227227
228228One way they can be used is to produce different versions of a function. There is a door in the Hoon standard library, `++ rs`, for producing single-precision float functions. The various arms of this door (e.g., `add`, `sub`, `mul`) are designed for use with atoms whose aura is `@rs`:
229229
learn/hoon/hoon-tutorial/gates.md+3−3
@@ -7,11 +7,11 @@ In this lesson you're going to learn about Hoon functions.
77
88## What is a Function?
99
10−The word 'function' is used in various ways, but let's start by talking about them in the [mathematical sense](https://en.wikipedia.org/wiki/Function_(mathematics%29). Roughly put, a function takes one or more arguments (i.e., input values) and returns a value. What the return value is depends solely on the argument(s), and nothing else. For example, we can understand multiplication as a function: it takes two numbers and returns another number. It doesn't matter where you ask, when you ask, or what kind of hat you're wearing when you ask. If you pass the same two numbers (e.g., `3` and `4`), you get the same answer returned every time (`12`).
10+The word 'function' is used in various ways, but let's start by talking about them in the [mathematical sense](https://en.wikipedia.org/wiki/Function_%28mathematics%29). Roughly put, a function takes one or more arguments (i.e., input values) and returns a value. What the return value is depends solely on the argument(s), and nothing else. For example, we can understand multiplication as a function: it takes two numbers and returns another number. It doesn't matter where you ask, when you ask, or what kind of hat you're wearing when you ask. If you pass the same two numbers (e.g., `3` and `4`), you get the same answer returned every time (`12`).
1111
1212That output value depends solely upon input value(s) is an important property of functions. This property is called [referential transparency](https://en.wikipedia.org/wiki/Referential_transparency), and we make use of it throughout the Urbit software stack.
1313
14−Functions are implemented in Hoon with a special kind of core called a *gate*. In this lesson you'll learn what a gate is and how a gate represents a function. Along the way you'll build some example gates of your own.
14+Functions are implemented in Hoon with a special kind of core called a **gate**. In this lesson you'll learn what a gate is and how a gate represents a function. Along the way you'll build some example gates of your own.
1515
1616You've already used two functions from the Hoon standard library: `add` and `mul`. These are implemented with gates, and you call them from the dojo in the following way:
1717
@@ -142,7 +142,7 @@ We see now that the sample of `inc` is the value `0`, and has `a` as a face. Th
1421421
143143```
144144
145−The placeholder value is sometimes called a *bunt* value. The bunt value is determined by the input type; for atoms, `@`, the bunt value is `0`.
145+The placeholder value is sometimes called a **bunt** value. The bunt value is determined by the input type; for atoms, `@`, the bunt value is `0`.
146146
147147The face value of `a` comes from the way we defined the gate above: `|=(a=@ (add 1 a))`. It was so we could use `a` to refer to the sample to generate the product with `(add 1 a)`.
148148
learn/hoon/hoon-tutorial/hoon-syntax.md+20−20
@@ -5,9 +5,9 @@ template = "doc.html"
55+++
66The study of Hoon can be divided into two parts: syntax and semantics.
77
8−The [syntax](https://en.wikipedia.org/wiki/Syntax_(programming_languages%29) of a programming language is the set of rules that determine what counts as admissible code in that language. It determines which characters may be used in the source, and also how these characters may be assembled to constitute a program. Attempting to run a program that doesn't follow these rules will result in a syntax error.
8+The [syntax](https://en.wikipedia.org/wiki/Syntax_%28programming_languages%29) of a programming language is the set of rules that determine what counts as admissible code in that language. It determines which characters may be used in the source, and also how these characters may be assembled to constitute a program. Attempting to run a program that doesn't follow these rules will result in a syntax error.
99
10−The [semantics](https://en.wikipedia.org/wiki/Semantics_(computer_science%29) of a programming language concerns the meaning of the various parts of that language's code.
10+The [semantics](https://en.wikipedia.org/wiki/Semantics_%28computer_science%29) of a programming language concerns the meaning of the various parts of that language's code.
1111
1212In this lesson we cover Hoon's syntax. A strict account of Hoon's syntax would refrain from making any reference at all to semantics, but for ease of exposition we won't be quite so fastidious.
1313
@@ -51,9 +51,9 @@ Note that the list includes two separate whitespace forms: `ace` for a single sp
5151
5252## Expressions of Hoon
5353
54−An [expression](https://en.wikipedia.org/wiki/Expression_(computer_science%29) is a combination of characters that the language interprets and evaluates as producing a value. Hoon programs are made up entirely of expressions.
54+An [expression](https://en.wikipedia.org/wiki/Expression_%28computer_science%29) is a combination of characters that the language interprets and evaluates as producing a value. Hoon programs are made up entirely of expressions.
5555
56−Hoon expressions can be either basic or complex. Basic expressions of Hoon are fundamental, meaning that they can't be broken down into smaller expressions. Complex expressions are made up of smaller expressions (which are called *subexpressions*).
56+Hoon expressions can be either basic or complex. Basic expressions of Hoon are fundamental, meaning that they can't be broken down into smaller expressions. Complex expressions are made up of smaller expressions (which are called **subexpressions**).
5757
5858There are many categories of Hoon expressions: noun literals, wing expressions, type expressions, and rune expressions. Let's go over each.
5959
@@ -61,7 +61,7 @@ There are many categories of Hoon expressions: noun literals, wing expressions,
6161
6262A noun is either an atom or a cell. An atom is an unsigned integer and a cell is a pair of nouns.
6363
64−There are [literal](https://en.wikipedia.org/wiki/Literal_(computer_programming%29) expressions for each kind of noun. A noun literal is just a notation for representing a fixed noun value.
64+There are [literal](https://en.wikipedia.org/wiki/Literal_%28computer_programming%29) expressions for each kind of noun. A noun literal is just a notation for representing a fixed noun value.
6565
6666We start with atom literals. Each of these is a basic expression of Hoon that evaluates to itself. Examples:
6767
@@ -149,7 +149,7 @@ They may also be put in brackets to indicate compound types, e.g., `[@ ^]`, `[@u
149149
150150### Rune Expressions
151151
152−A *rune* is just a pair of ASCII characters (a digraph). You've already seen some runes in Chapter 1: `|=`,`|%`, and `|_`. We usually pronounce runes by combining their characters' names, e.g.: 'ket-hep' for `^-`, 'bar-tis' for `|=`, and 'bar-cen' for `|%`. As stated previously, these names are entirely optional.
152+A **rune** is just a pair of ASCII characters (a digraph). You've already seen some runes in Chapter 1: `|=`,`|%`, and `|_`. We usually pronounce runes by combining their characters' names, e.g.: 'ket-hep' for `^-`, 'bar-tis' for `|=`, and 'bar-cen' for `|%`. As stated previously, these names are entirely optional.
153153
154154Expressions with a rune at the beginning are rune expressions. Most runes are used at the beginning of a complex expression, but there are exceptions. For example, the runes `--` and `==` are used at the end of certain expressions.
155155
@@ -159,7 +159,7 @@ Rune expressions are usually complex, which means they usually have one or more
159159
160160#### Tall and Flat Forms
161161
162−There are two rune syntax forms: *tall* and *flat*. Tall form is usually used for multi-line expressions, and flat form is used for one-line expressions. Most runes can be used in either of tall or flat forms. Tall form expressions may contain flat form subexpressions, but flat form expressions may not contain tall form.
162+There are two rune syntax forms: **tall** and **flat**. Tall form is usually used for multi-line expressions, and flat form is used for one-line expressions. Most runes can be used in either of tall or flat forms. Tall form expressions may contain flat form subexpressions, but flat form expressions may not contain tall form.
163163
164164The spacing rules differ in the two forms. In tall form, each rune and subexpression must be separated from the others by a `gap` -- that is, by two or more spaces, or a line break. In flat form the rune is immediately followed by parentheses `( )`, and the various subexpressions inside the parentheses must be separated from the others by an `ace` -- that is, by a single space.
165165
@@ -352,11 +352,11 @@ See [Hoon Style Guide](https://urbit.org/docs/learn/hoon/style/).
352352
353353### Rune Expression Body Types
354354
355−Let's call everything in the expression after the initial rune the expression *body*. There are four kinds of body: *fixed*, *running*, *jogging*, and *battery*. There is a preferred manner of styling for each body.
355+Let's call everything in the expression after the initial rune the expression **body**. There are four kinds of body: **fixed**, **running**, **jogging**, and **battery**. There is a preferred manner of styling for each body.
356356
357357#### Fixed
358358
359−Some runes have a *fixed* number of subexpressions. For example, the `:-` and `.=` runes each have exactly two.
359+Some runes have a **fixed** number of subexpressions. For example, the `:-` and `.=` runes each have exactly two.
360360
361361Fixed bodies often use "backstep" indentation in tall form. In backstep indentation the code slopes backward and to the right by two spaces per line. The last subexpression isn't indented at all, and the first subexpression is on the same line as the rune. The indentation of the first subexpression therefore depends upon the total number of subexpressions.
362362
@@ -393,7 +393,7 @@ Let's look at these in tall form, using backstep indentation:
393393```
394394
395395
396−Some other *1-fixed*, *2-fixed*, *3-fixed* and *4-fixed* examples, using `p`, `q`, `r`, and `s` for the subexpressions:
396+Some other **1-fixed**, **2-fixed**, **3-fixed** and **4-fixed** examples, using `p`, `q`, `r`, and `s` for the subexpressions:
397397
398398```
399399|.
@@ -416,7 +416,7 @@ In optimal usage of backstep indentation the most complicated subexpressions are
416416
417417#### Running
418418
419−A *running* body doesn't have a fixed number of subexpressions; expressions with running bodies can be arbitrarily long.
419+A **running** body doesn't have a fixed number of subexpressions; expressions with running bodies can be arbitrarily long.
420420
421421To indicate the end of such expressions in tall form, use the `==` rune. The first subexpression is two spaces after the initial rune, and all others are indented to line up with the first. The terminating `==` should align vertically with the initial rune. In flat form, parentheses are used around the expression body, so the terminating `==` is unnecessary.
422422
@@ -458,7 +458,7 @@ More generally:
458458
459459#### Jogging
460460
461−A *jogging* body is an arbitrarily long series of subexpression pairs. Most jogging bodies are preceded by a fixed sequence of subexpressions. The first jogging pair is one line after the last fixed subexpression, and indented two spaces behind it. There are two jogging conventions: *flat* (each pair on one line) and *tall* (each pair split across lines). In either case the expression is terminated with a `==`.
461+A **jogging** body is an arbitrarily long series of subexpression pairs. Most jogging bodies are preceded by a fixed sequence of subexpressions. The first jogging pair is one line after the last fixed subexpression, and indented two spaces behind it. There are two jogging conventions: **flat** (each pair on one line) and **tall** (each pair split across lines). In either case the expression is terminated with a `==`.
462462
463463The `?-` rune is `1-fixed` followed by a jogging body. The fixed subexpression is evaluated and then compared against the left subexpression of each of the jogging pairs. When a match is found, the subexpression to the right of the match is evaluated.
464464
@@ -473,7 +473,7 @@ For example:
473473%yes
474474```
475475
476−More generally, the *flat jogging* style (preceded by *1-fixed* `p`):
476+More generally, the **flat jogging** style (preceded by **1-fixed** `p`):
477477
478478```
479479?- p
@@ -483,7 +483,7 @@ More generally, the *flat jogging* style (preceded by *1-fixed* `p`):
483483==
484484```
485485
486−A *tall jogging* example (preceded by *1-fixed* `p`):
486+A **tall jogging** example (preceded by **1-fixed** `p`):
487487
488488```
489489?- p
@@ -496,7 +496,7 @@ A *tall jogging* example (preceded by *1-fixed* `p`):
496496==
497497```
498498
499−In flat form for *jogging* bodies, subexpression pairs are separated by commas:
499+In flat form for **jogging** bodies, subexpression pairs are separated by commas:
500500
501501```
502502$(a +(a), b (dec b), c (add 2 c))
@@ -506,7 +506,7 @@ $(a +(a), b (dec b), c (add 2 c))
506506
507507Certain runes are used to create a core. Cores with multiple arms have a special syntax for defining each of the arms in the battery. A core has no fixed limit on the number of arms contained in its battery, so you must terminate core expressions with the `--` rune. Each arm in the battery is defined with three things: (1) a rune in the `+` family (e.g., `++`, `+*`, and `+$`), (2) an arm name, and (3) a subexpression defining the content of that arm. Runes in the `+` family may only go in core subexpressions. Putting them anywhere else results in a syntax error.
508508
509−Here's an example of a *battery* body:
509+Here's an example of a **battery** body:
510510
511511```
512512|%
@@ -523,11 +523,11 @@ Here's an example of a *battery* body:
523523
524524There's no denying that Hoon's syntax is a bit strange, especially for those used to working in other programming languages. Hoon makes heavy use of ASCII characters, and this can be intimidating to newcomers. However, we believe that anyone who learns Hoon syntax will find that it has a number of advantages.
525525
526−Hoon's syntax is designed to address three serious problems in functional syntax design. These problems are: (1) *terminator piles*, (2) *indentation creep*, and (3) *feature/label confusion*.
526+Hoon's syntax is designed to address three serious problems in functional syntax design. These problems are: (1) **terminator piles**, (2) **indentation creep**, and (3) **feature/label confusion**.
527527
528528### Terminator piles
529529
530−A *terminator pile* is a series of termination characters required to end some expression in a language. Think of Lisp's stacks of right parentheses. For a trivial example, let's say you want to add 22 five times in Lisp using `+`:
530+A **terminator pile** is a series of termination characters required to end some expression in a language. Think of Lisp's stacks of right parentheses. For a trivial example, let's say you want to add 22 five times in Lisp using `+`:
531531
532532```
533533(+ 22 (+ 22 (+ 22 (+ 22 22))))
@@ -552,13 +552,13 @@ In a sufficiently complicated expression it's tedious to keep track of all the p
552552
553553### Indentation creep
554554
555−In some programming languages there is an indentation convention according to which an expression embedded within a parent expression is indented more to the right. In a sufficiently long and complicated function with many embedded subexpressions, the tendency is for the code to shift more and more to the right. This tendency is called *indentation creep*, and it can become an irritating problem when working with long functions. It's true that short functions are better, but long ones sometimes need to be written.
555+In some programming languages there is an indentation convention according to which an expression embedded within a parent expression is indented more to the right. In a sufficiently long and complicated function with many embedded subexpressions, the tendency is for the code to shift more and more to the right. This tendency is called **indentation creep**, and it can become an irritating problem when working with long functions. It's true that short functions are better, but long ones sometimes need to be written.
556556
557557Ordinary indentation conventions give long functions a _diagonal_ shape, which is a poor fit for most editor windows. Because Hoon is designed to be written with 'backstep' indentation, the code flows _down_, not down and across.
558558
559559### Feature/label confusion
560560
561−A language lends itself to *feature/label confusion* (FLC) when it's difficult to distinguish general features of the language from labels in a particular program. This can be a serious problem other functional programming languages. In Lisp, for example, a user-defined macro has the same syntax as a function call.
561+A language lends itself to **feature/label confusion** (FLC) when it's difficult to distinguish general features of the language from labels in a particular program. This can be a serious problem other functional programming languages. In Lisp, for example, a user-defined macro has the same syntax as a function call.
562562
563563The worst-case result of FLC is "DSL cancer". Every source file with this malady is effectively written in its own domain-specific language (DSL). Learning to read such a file is like learning a language. One can also describe the result as "write-only code". User-level macros, operator overloading, and even excessive use of higher-order programming, can all lead quickly to the tragedy of write-only code.
564564
learn/hoon/hoon-tutorial/multi-gate-cores-and-doors.md+1−1
@@ -249,7 +249,7 @@ Here are some of the other gates that can be generated from this core in the Hoo
249249
250250A brief review: A core is a cell of battery and payload: `[battery payload]`. The battery is code and the payload is data. The battery contains a series of arms, and the payload contains all the data necessary to run those arms correctly.
251251
252−New material: A *door* is a core with a sample. That is, a door is a core whose payload is a cell of sample and context: `[sample context]`.
252+New material: A **door** is a core with a sample. That is, a door is a core whose payload is a cell of sample and context: `[sample context]`.
253253
254254```
255255 Door
learn/hoon/hoon-tutorial/nouns.md+9−9
@@ -7,7 +7,7 @@ In Urbit every piece of data is a noun. In order to understand Hoon one must fi
77
88## Noun Definition
99
10−A *noun* is either an atom or a cell. An *atom* is a natural number ("unsigned integer" in computer lingo) of any size, including zero. A *cell* is an [ordered pair](https://en.wikipedia.org/wiki/Ordered_pair) of nouns, usually indicated with square brackets around the nouns in question; i.e., `[a b]`, where `a` and `b` are nouns.
10+A **noun** is either an atom or a cell. An **atom** is a natural number ("unsigned integer" in computer lingo) of any size, including zero. A **cell** is an [ordered pair](https://en.wikipedia.org/wiki/Ordered_pair) of nouns, usually indicated with square brackets around the nouns in question; i.e., `[a b]`, where `a` and `b` are nouns.
1111
1212Here are some atoms:
1313
@@ -28,11 +28,11 @@ All of the above are nouns.
2828
2929You may or may not have noticed that the definition of 'noun' is [recursive](https://en.wikipedia.org/wiki/Recursion). Recursion is an important concept for functional programming, so it's worth taking a moment to understand it better.
3030
31−A recursive definition has three clauses: a base clause, a generating clause, and a closure clause. Let's say you want to use recursion to define some X. The definition should allow one to determine whether any given object is a member of X. The *base clause* of the recursive definition defines one or more objects as trivial members of X. The *generating clause* defines other objects as also being X by their relationship to previously established members of X. The *closure clause* asserts that nothing else is a member of X than what has been given in the first two clauses. Often the closure clause is not explicitly stated.
31+A recursive definition has three clauses: a base clause, a generating clause, and a closure clause. Let's say you want to use recursion to define some X. The definition should allow one to determine whether any given object is a member of X. The **base clause** of the recursive definition defines one or more objects as trivial members of X. The **generating clause** defines other objects as also being X by their relationship to previously established members of X. The **closure clause** asserts that nothing else is a member of X than what has been given in the first two clauses. Often the closure clause is not explicitly stated.
3232
3333For example, let's say you want to define the phrase 'ancestor of George Washington'. Which 'objects' are members of that set? The base clause is simple: the parents of George Washington are trivial ancestors of George Washington. The generating clause is: given that some x is an ancestor of George Washington, the parents of x are also ancestors of George Washington. The closure clause is: nothing else is an ancestor of George Washington. That's it!
3434
35−Let's restate the definition of *noun* in these terms. The base clause of the definition of a 'noun' is: all atoms are nouns (where an 'atom' is an unsigned integer). The generating clause is: if x and y are nouns, then the cell `[x y]` is also a noun. (A 'cell' is an ordered pair of nouns.). The closure clause is: nothing else is a noun.
35+Let's restate the definition of **noun** in these terms. The base clause of the definition of a 'noun' is: all atoms are nouns (where an 'atom' is an unsigned integer). The generating clause is: if x and y are nouns, then the cell `[x y]` is also a noun. (A 'cell' is an ordered pair of nouns.). The closure clause is: nothing else is a noun.
3636
3737We belabor this point about recursion only because it's an important concept for having a firm grasp of functional programming. We'll talk more about recursion at various points in this series.
3838
@@ -116,11 +116,11 @@ As for why the dojo deleted your zero: it parses the command line as you type, a
116116
117117### Atom Auras
118118
119−Atoms are nothing more than unsigned integers -- natural numbers -- but it's often useful to represent an atom in a different way. This is done with an *aura*. The aura of an atom is type meta-data used by Hoon to determine how to interpret that atom. It answers the question: What type of information is this atom?
119+Atoms are nothing more than unsigned integers -- natural numbers -- but it's often useful to represent an atom in a different way. This is done with an **aura**. The aura of an atom is type meta-data used by Hoon to determine how to interpret that atom. It answers the question: What type of information is this atom?
120120
121121We use auras because data isn't always represented as a positive decimal number. Sometimes we want to represent data as binary, as text, or as a negative number. Auras allow us to to use such types of data _without changing the underlying atom_.
122122
123−We won't fully explain auras and their various uses yet. Auras will be covered more comprehensively in a later lesson. For now let's just look at the various kinds of [literal syntax](https://en.wikipedia.org/wiki/Literal_(computer_programming%29) associated with a few atom auras.
123+We won't fully explain auras and their various uses yet. Auras will be covered more comprehensively in a later lesson. For now let's just look at the various kinds of [literal syntax](https://en.wikipedia.org/wiki/Literal_%28computer_programming%29) associated with a few atom auras.
124124
125125In computer science, a 'literal' is an expression that represents and evaluates to a fixed value. The default syntax of an atom literal is the German-style decimal notation, as seen above. Let's look at some other atom literal syntaxes: unsigned binary, unsigned hexadecimal, signed decimal, signed binary and hexadecimal.
126126
@@ -204,7 +204,7 @@ Urbit identities such as `~zod` and `~sorreg-namtyv` are also atoms, but of the
204204~sorreg-namtyv
205205```
206206
207−Hoon permits the use of atoms as strings. Strings that are encoded as atoms are called *cords*. Cords are of the aura `@t`. The literal syntax of a cord is text inside a pair of single-quotes, e.g., `'Hello world!'`.
207+Hoon permits the use of atoms as strings. Strings that are encoded as atoms are called **cords**. Cords are of the aura `@t`. The literal syntax of a cord is text inside a pair of single-quotes, e.g., `'Hello world!'`.
208208
209209```
210210> 'Howdy!'
@@ -220,7 +220,7 @@ Hoon permits the use of atoms as strings. Strings that are encoded as atoms are
22022010.334.410.032.606.748.633.331.426.632
221221```
222222
223−Hoon also has *terms*, of the aura `@tas`. Terms are constant values that are used to tag data using the type system. These are strings preceded with a `%` and made up of lower-case letters, numbers, and hyphens, i.e., 'kebab case'. The first character after the `%` must be a letter. For example, `%a`, `%hello`, `%this-is-kebab-case123`.
223+Hoon also has **terms**, of the aura `@tas`. Terms are constant values that are used to tag data using the type system. These are strings preceded with a `%` and made up of lower-case letters, numbers, and hyphens, i.e., 'kebab case'. The first character after the `%` must be a letter. For example, `%a`, `%hello`, `%this-is-kebab-case123`.
224224
225225```
226226> %howdy
@@ -297,7 +297,7 @@ You'll learn more about atoms and auras in [lesson 2.4](../atoms-auras-and-simpl
297297
298298## Cells
299299
300−There's not much mystery about cells. The left of a cell is called the *head*, and the right is called the *tail*. Cells are typically represented in Hoon with square brackets around a pair of nouns.
300+There's not much mystery about cells. The left of a cell is called the **head**, and the right is called the **tail**. Cells are typically represented in Hoon with square brackets around a pair of nouns.
301301
302302```
303303> [32 320]
@@ -365,7 +365,7 @@ Without using the dojo, assess whether each of the following pairs of nouns is e
365365
366366## Noun Addresses
367367
368−Nouns have a regular structure that can be exploited to give a unique *address* to each of its 'sub-nouns'. A sub-noun is a part of a noun that is itself a noun; e.g., `[6 2]` is a sub-noun of `[[1 3] [6 2]]`. We can also call these 'noun fragments'.
368+Nouns have a regular structure that can be exploited to give a unique **address** to each of its 'sub-nouns'. A sub-noun is a part of a noun that is itself a noun; e.g., `[6 2]` is a sub-noun of `[[1 3] [6 2]]`. We can also call these 'noun fragments'.
369369
370370What if you want to refer to a noun fragment, and not the whole thing? For example, what if you want to refer to the `[6 2]` part of `[[1 3] [6 2]]`? One way is to use the unique address of that noun fragment.
371371
learn/hoon/hoon-tutorial/setup.md+4−4
@@ -13,11 +13,11 @@ Once you're finished you can boot your very own urbit.
1313
1414## What is an urbit?
1515
16−An *urbit* is an Urbit virtual computer with persistent state that can connect to the Urbit network. (Note the lowercase 'u' here. 'Urbit' is the entire software stack, whereas 'an urbit' is a local instance.) Each urbit is associated with a unique number that plays three distinct roles: (1) it's an address on the Urbit network, (2) it's a cryptographic identity, and (3) it's (in principle) a human memorable name. Normally an urbit's name is represented as a string starting with `~`, as in `~zod` or `~taglux-nidsep`.
16+An **urbit** is an Urbit virtual computer with persistent state that can connect to the Urbit network. (Note the lowercase 'u' here. 'Urbit' is the entire software stack, whereas 'an urbit' is a local instance.) Each urbit is associated with a unique number that plays three distinct roles: (1) it's an address on the Urbit network, (2) it's a cryptographic identity, and (3) it's (in principle) a human memorable name. Normally an urbit's name is represented as a string starting with `~`, as in `~zod` or `~taglux-nidsep`.
1717
1818These may not look like numbers, but they are. Each urbit name is written in a base-256 format, where each 'digit' is a syllable. Imagine your phone number as a pronounceable string which sounds like a name in a foreign language. An ordinary user-level urbit is a 'planet', and it's named by a 32-bit number. The latter is represented as a four-syllable string; e.g., the planet name `~taglux-nidsep` is the number 6,095,360.
1919
20−For this tutorial you'll boot and run what we call a 'comet'. *Comets* are urbits whose names are 128-bits or 16 syllables, such as:
20+For this tutorial you'll boot and run what we call a 'comet'. **Comets** are urbits whose names are 128-bits or 16 syllables, such as:
2121
2222`~hillyn-pitwet-hasdur-paswer--miszod-rabpex-divrup-fogdur`
2323
@@ -43,7 +43,7 @@ http: live (insecure, loopback) on 12321
4343
4444(There will likely be other messages as well.)
4545
46−Look at the prompt, `~palnul_nocser:dojo>`. To the left of the `:` you'll see an abbreviation of the comet name you just booted, `~palnul_nocser` in this case. To the right is the name of a local application, `dojo`. *Dojo* is the Urbit command line app; it's also a Hoon [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) we'll use to run simple Hoon examples.
46+Look at the prompt, `~palnul_nocser:dojo>`. To the left of the `:` you'll see an abbreviation of the comet name you just booted, `~palnul_nocser` in this case. To the right is the name of a local application, `dojo`. **Dojo** is the Urbit command line app; it's also a Hoon [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) we'll use to run simple Hoon examples.
4747
4848To make sure everything is working, type `(add 2 2)` at the prompt and hit return. Your screen now shows:
4949
@@ -66,7 +66,7 @@ You just used a function from the Hoon standard library, `add`. Next, quit Urbi
6666$
6767```
6868
69−Your comet isn't running anymore and you're back at your computer's normal terminal prompt. You now have a `mycomet` directory for your Urbit comet; this directory is your comet's *pier* and it contains the entirety of your comet's state.
69+Your comet isn't running anymore and you're back at your computer's normal terminal prompt. You now have a `mycomet` directory for your Urbit comet; this directory is your comet's **pier** and it contains the entirety of your comet's state.
7070
7171Right now the only thing in your pier is your comet's system files:
7272
learn/hoon/hoon-tutorial/simple-one-gate-programs.md+2−2
@@ -552,7 +552,7 @@ This rune is often used for modifying the value of a face whose value was set be
552552
553553## Recursion
554554
555−How do we do loops in Hoon? Like other functional programming languages Hoon uses [recursion](https://en.wikipedia.org/wiki/Recursion_(computer_science%29). In rough terms, a recursive function solves a problem in part by calling on itself to solve a slightly easier or smaller case of the same problem. The self-calling loop continues until the simplified problem is so simple that it has a trivial solution.
555+How do we do loops in Hoon? Like other functional programming languages Hoon uses [recursion](https://en.wikipedia.org/wiki/Recursion_%28computer_science%29). In rough terms, a recursive function solves a problem in part by calling on itself to solve a slightly easier or smaller case of the same problem. The self-calling loop continues until the simplified problem is so simple that it has a trivial solution.
556556
557557Seeing an example will make this process easier to understand.
558558
@@ -580,7 +580,7 @@ What's `dec`? It takes some atom, `@`, and returns the decrement -- i.e., it ta
58058010
581581```
582582
583−For adding two atoms together, the algorithm we'll use is very simple. We start with two numbers, `a` and `b`. If `b` is `0`, then the answer is `a`. (This is the trivial case of addition for our algorithm, sometimes also called the 'base' case.) Otherwise, the answer is the sum of `a + 1` and `b - 1` -- now do *that* addition. (This is the *recursive* case.)
583+For adding two atoms together, the algorithm we'll use is very simple. We start with two numbers, `a` and `b`. If `b` is `0`, then the answer is `a`. (This is the trivial case of addition for our algorithm, sometimes also called the 'base' case.) Otherwise, the answer is the sum of `a + 1` and `b - 1` -- now do **that** addition. (This is the **recursive** case.)
584584
585585Do you see how this process calls for a loop of sorts? If you want to sum `7` and `2`, check to see whether the second number is `0`. It isn't, so now figure out the sum of `8` and `1`. Is the second number `0`? No, so do the sum of `9` and `0`. Now the second number is `0` -- the answer is `9`.
586586
learn/hoon/hoon-tutorial/structures-and-complex-types.md+6−6
@@ -7,7 +7,7 @@ In this lesson we'll talk a little about how type expressions become structures,
77
88## Structures
99
10−Attentive readers may remember that Hoon programs are made of expressions. By definition, an expression produces a value. We've talked about expressions for types such as `@`, `^`, `[? *]`, etc. What values do these subexpressions produce? The answer is that they produce a *structure*. But what are structures, and what role do they play in Hoon?
10+Attentive readers may remember that Hoon programs are made of expressions. By definition, an expression produces a value. We've talked about expressions for types such as `@`, `^`, `[? *]`, etc. What values do these subexpressions produce? The answer is that they produce a **structure**. But what are structures, and what role do they play in Hoon?
1111
1212You don't actually need to know much about what a structure is in order to write Hoon programs that use the type system effectively. Accordingly, we'll save the particular details for a later lesson. Here we'll give only a sketch of the most important features.
1313
@@ -28,7 +28,7 @@ Structures play different roles in different code contexts. First, let's look a
2828
2929The `@`, `^`, and `[? *]` subexpressions have no effect on the overall value produced.
3030
31−It's important to understand that these casts don't affect the [runtime](https://en.wikipedia.org/wiki/Run_time_(program_lifecycle_phase%29) semantics of a program at all. They affect only the compiler behavior at compile-time. The compiler does these type-checks when compiling, but the resulting code has no value corresponding to the types above.
31+It's important to understand that these casts don't affect the [runtime](https://en.wikipedia.org/wiki/Run_time_%28program_lifecycle_phase%29) semantics of a program at all. They affect only the compiler behavior at compile-time. The compiler does these type-checks when compiling, but the resulting code has no value corresponding to the types above.
3232
3333Accordingly, the structures produced by the type subexpressions above aren't part of the program's runtime semantics. They are compile-time values only.
3434
@@ -36,7 +36,7 @@ Accordingly, the structures produced by the type subexpressions above aren't par
3636
3737In other cases, structures _can_ have an effect on runtime semantics. For example, consider the expression `|=(a=@ 15)`. This produces a gate that takes any atom as its sample and returns `15`.
3838
39−The `@` subexpression of `|=(a=@ 15)` produces a structure at compile time. In the compiled program this structure is converted to a default value for the appropriate type, sometimes called an *example* value (or a *bunt* value).
39+The `@` subexpression of `|=(a=@ 15)` produces a structure at compile time. In the compiled program this structure is converted to a default value for the appropriate type, sometimes called an **example** value (or a **bunt** value).
4040
4141```
4242> |=(a=@ 15)
@@ -97,7 +97,7 @@ Structures can also become gates at runtime. To produce such a gate, use a type
9797>
9898```
9999
100−In all three cases, the result of evaluation is a gate. For each, the head is a single arm, signified by `1.xxx`. The sample -- i.e., the head of the tail -- in each case is of the type `*`. These gates are sometimes called *molds*.
100+In all three cases, the result of evaluation is a gate. For each, the head is a single arm, signified by `1.xxx`. The sample -- i.e., the head of the tail -- in each case is of the type `*`. These gates are sometimes called **molds**.
101101
102102Molds are gates with two special properties: (1) they are guaranteed to produce a value of the type indicated by the type expression, and (2) they are [idempotent](https://en.wikipedia.org/wiki/Idempotence). (A gate `i` is idempotent if and only if the result of applying `i` multiple times to a value produces the same result as applying it once. In other words, `(i val)` must produce the same result as `(i (i val))`.)
103103
@@ -195,7 +195,7 @@ nest-fail
195195
196196#### Two Interpretations for `[@ ?]` (and Other Such Expressions)
197197
198−Why are `$:(@ ?)` and `[@ ?]` the same only 'most of the time'? Why not always? The answer has to do with the way Hoon handles certain rune subexpressions. Some subexpressions are reserved exclusively for types. For example, the `^-` rune is always followed by two subexpressions, the first of which must indicate a type. Subexpressions reserved exclusively for types are interpreted as types. These subexpressions must *always* produce a single structure, at least as an intermediate piece of data at compile-time. When `[@ ?]` is interpreted by Hoon as indicating a type, the result is a structure equivalent to that of `$:(@ ?)`.
198+Why are `$:(@ ?)` and `[@ ?]` the same only 'most of the time'? Why not always? The answer has to do with the way Hoon handles certain rune subexpressions. Some subexpressions are reserved exclusively for types. For example, the `^-` rune is always followed by two subexpressions, the first of which must indicate a type. Subexpressions reserved exclusively for types are interpreted as types. These subexpressions must **always** produce a single structure, at least as an intermediate piece of data at compile-time. When `[@ ?]` is interpreted by Hoon as indicating a type, the result is a structure equivalent to that of `$:(@ ?)`.
199199
200200The first subexpression after the `|=` rune is also interpreted in the same way, i.e., as giving a type definition (in this case for the gate sample).
201201
@@ -265,7 +265,7 @@ nest-fail
265265
266266### `$?` Define a Union
267267
268−In set theory, the [union](https://en.wikipedia.org/wiki/Union_(set_theory%29) of sets A and B is a set containing all members of both A and B. For example, the union of the set of even integers and the set of odd integers is the set of all integers.
268+In set theory, the [union](https://en.wikipedia.org/wiki/Union_%28set_theory%29) of sets A and B is a set containing all members of both A and B. For example, the union of the set of even integers and the set of odd integers is the set of all integers.
269269
270270It's useful to be able to define a type that is the union of other types. The `$?` rune lets us do this. The `$?` takes a series of subexpressions, each of which must be a structure. The resulting type is the union of all types indicated in the expression. For example, `$?(%green %yellow %red)` is the union of the types indicated by `%green`, `%yellow`, and `%red`.
271271
learn/hoon/hoon-tutorial/the-subject-and-its-legs.md+4−4
@@ -69,11 +69,11 @@ The subject is a noun, just like any other piece of Hoon data. In the last less
6969 14 15
7070```
7171
72−Each fragment of a noun is itself a noun, and hence can be understood as a binary tree as well. Each fragment or 'subtree' sticks out of the original tree, like a *limb*. A 'limb' is a subtree of the subject.
72+Each fragment of a noun is itself a noun, and hence can be understood as a binary tree as well. Each fragment or 'subtree' sticks out of the original tree, like a **limb**. A 'limb' is a subtree of the subject.
7373
7474Sometimes a programmer simply wants to produce a value from the subject. In other cases more is desired -- programmers often want to carry out substantive computations on data in the subject. There are two kinds of limbs to accommodate these two cases: arms and legs.
7575
76−*Arms* are limbs of the subject that are used for carrying out substantive computations. We'll talk about arms in the next lesson. *Legs* are limbs that store data. Any limb that isn't an arm is a leg. In this lesson we'll talk about various ways to access legs of the subject.
76+**Arms** are limbs of the subject that are used for carrying out substantive computations. We'll talk about arms in the next lesson. **Legs** are limbs that store data. Any limb that isn't an arm is a leg. In this lesson we'll talk about various ways to access legs of the subject.
7777
7878### Address-based Limb Expressions
7979
@@ -383,7 +383,7 @@ How do you get to that `b=2`? And how do you get to the `c` in `[[4 a=5] b=[c=1
383383
384384## Wings
385385
386−A *wing* is a limb resolution path into the subject. A wing expression indicates the path as a series of limb expressions separated by the `.` character. E.g.,
386+A **wing** is a limb resolution path into the subject. A wing expression indicates the path as a series of limb expressions separated by the `.` character. E.g.,
387387
388388```
389389limb1.limb2.limb3
@@ -477,7 +477,7 @@ In fact, you may already know how to find the answer. The subject is a noun and
477477
478478This noun (or a modified version of it) is the subject used for Hoon expressions entered into the dojo.
479479
480−We can't explain every part of the subject just yet, but you should be able to recognize some of it. There is a face, `our`, serving as a label for the urbit's name. Another face, `now`, is a label for an absolute date. `eny` is a face for an atom serving as [entropy](https://en.wikipedia.org/wiki/Entropy_(computing%29). The value for `eny` is different every time it's checked.
480+We can't explain every part of the subject just yet, but you should be able to recognize some of it. There is a face, `our`, serving as a label for the urbit's name. Another face, `now`, is a label for an absolute date. `eny` is a face for an atom serving as [entropy](https://en.wikipedia.org/wiki/Entropy_%28computing%29). The value for `eny` is different every time it's checked.
481481
482482```
483483> our
learn/hoon/hoon-tutorial/type-checking-and-type-inference.md+4−4
@@ -3,7 +3,7 @@ title = "Type Checking and Type Inference"
33weight = 25
44template = "doc.html"
55+++
6−As the Hoon compiler compiles your Hoon code, it does a *type check* on certain expressions to make sure they are guaranteed to produce a value of the correct type. If it cannot be proved that the output value is correctly typed, the compile will fail with a `nest-fail` crash. In order to figure out what type of value is produced by a given expression, the compiler uses *type inference* on that code. In this lesson we'll cover various cases in which a type check is performed, and also how the compiler does type inference on an expression.
6+As the Hoon compiler compiles your Hoon code, it does a **type check** on certain expressions to make sure they are guaranteed to produce a value of the correct type. If it cannot be proved that the output value is correctly typed, the compile will fail with a `nest-fail` crash. In order to figure out what type of value is produced by a given expression, the compiler uses **type inference** on that code. In this lesson we'll cover various cases in which a type check is performed, and also how the compiler does type inference on an expression.
77
88## Type Checking
99
@@ -108,7 +108,7 @@ nest-fail
108108
109109### Arm Evaluation
110110
111−Whenever an arm is evaluated in Hoon it expects to have some version of its parent core as the subject. Specifically, a type check is performed to see whether the arm subject is of the appropriate *type*. We see this in action whenever a gate or a multi-arm door is called.
111+Whenever an arm is evaluated in Hoon it expects to have some version of its parent core as the subject. Specifically, a type check is performed to see whether the arm subject is of the appropriate **type**. We see this in action whenever a gate or a multi-arm door is called.
112112
113113A gate is a one-armed core with a sample. When it is called, its `$` arm is evaluated with (a version of) the gate as the subject. The only part of the core that might change is the payload, including the sample. Of course, we want the sample to be able to change. The sample is where the argument(s) of the function call are placed. For example, when we call `add` the `$` arm of expects two atoms for the sample, i.e., the two numbers to be added. When the type check occurs, the payload must be of the appropriate type. If it isn't, the result is a `nest-fail` crash.
114114
@@ -135,11 +135,11 @@ This isn't a comprehensive list of the type checks in Hoon. It's only some of t
135135
136136## Intro to Hoon Type Inference
137137
138−It's helpful to know *that* Hoon infers the type of any given expression, but it's important to know *how* such inference works. Hoon uses various tools for inferring the type of any given expression: literal syntax, cast expressions, gate sample definitions, conditional expressions, and more.
138+It's helpful to know **that** Hoon infers the type of any given expression, but it's important to know **how** such inference works. Hoon uses various tools for inferring the type of any given expression: literal syntax, cast expressions, gate sample definitions, conditional expressions, and more.
139139
140140### Literals
141141
142−[Literals](https://en.wikipedia.org/wiki/Literal_(computer_programming%29) are expressions that represent fixed values. Some examples (with the inferred type on the right):
142+[Literals](https://en.wikipedia.org/wiki/Literal_%28computer_programming%29) are expressions that represent fixed values. Some examples (with the inferred type on the right):
143143
144144```
145145123 @ud
learn/hoon/hoon-tutorial/type-polymorphism.md+13−13
@@ -3,7 +3,7 @@ title = "Type Polymorphism"
33weight = 31
44template = "doc.html"
55+++
6−There are many cases in which one may want to write a function that accepts as input various different types of data. Such a function is said to be [polymorphic](https://en.wikipedia.org/wiki/Polymorphism_(computer_science%29). ("Polymorphism" = "many forms"; so polymorphic functions accept many forms of data as input.)
6+There are many cases in which one may want to write a function that accepts as input various different types of data. Such a function is said to be [polymorphic](https://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29). ("Polymorphism" = "many forms"; so polymorphic functions accept many forms of data as input.)
77
88One relatively trivial form of polymorphism involves sub-typing. A gate whose sample is a raw `noun` can accept any Hoon data structure as input -- it's just that the sample will only be treated as a raw noun. For example, consider the `copy` gate below:
99
@@ -28,15 +28,15 @@ In this lesson we'll go over Hoon's support for more interesting polymorphic fun
2828
2929Hoon supports type polymorphism at the core level. That is, each core has certain polymorphic properties that are tracked and maintained as metadata by Hoon's type system. (See `+$ type` of `hoon.hoon`.) These properties determine the extent to which a core can be used as an interface for values of various types.
3030
31−This is rather vaguely put so far. We can clarify by talking more specifically about the kinds of polymorphism supported in Hoon. There are two kinds of type polymorphism for cores: [genericity](https://en.wikipedia.org/wiki/Generic_programming), to include certain kinds of of [parametric polymorphism](https://en.wikipedia.org/wiki/Parametric_polymorphism); and [variance polymorphism](https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science%29), which involves making use of special sub-typing rules for cores.
31+This is rather vaguely put so far. We can clarify by talking more specifically about the kinds of polymorphism supported in Hoon. There are two kinds of type polymorphism for cores: [genericity](https://en.wikipedia.org/wiki/Generic_programming), to include certain kinds of [parametric polymorphism](https://en.wikipedia.org/wiki/Parametric_polymorphism); and [variance polymorphism](https://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29), which involves making use of special sub-typing rules for cores.
3232
3333If you don't understand these very well, that's okay. We'll explain them. Let's begin with the former.
3434
3535## Dry vs. Wet Cores
3636
37−To review briefly, a *core* is a pair of `[battery payload]`. The *battery* contains the various arms of the core (code), and the *payload* contains all the data needed to evaluate those arms correctly (data). Every arm is evaluated with its parent core as the subject. A *gate* (i.e., a Hoon function) is a core with exactly one arm named `$` and with a payload of the form: `[sample context]`. The *sample* is reserved for the function's argument value, and the *context* is any other data needed to evaluate `$` correctly.
37+To review briefly, a **core** is a pair of `[battery payload]`. The **battery** contains the various arms of the core (code), and the **payload** contains all the data needed to evaluate those arms correctly (data). Every arm is evaluated with its parent core as the subject. A **gate** (i.e., a Hoon function) is a core with exactly one arm named `$` and with a payload of the form: `[sample context]`. The **sample** is reserved for the function's argument value, and the **context** is any other data needed to evaluate `$` correctly.
3838
39−There are two kinds of cores: *dry* and *wet*. Dry cores, which are more typical, _don't_ make use of *genericity*. Wet cores do. In order to understand generic functions in Hoon, you have to understand the difference between dry and wet cores.
39+There are two kinds of cores: **dry** and **wet**. Dry cores, which are more typical, _don't_ make use of **genericity**. Wet cores do. In order to understand generic functions in Hoon, you have to understand the difference between dry and wet cores.
4040
4141The cores produced with the `|=`, `|-`, `|%`, and `|_` runes, among others, are all dry. The cores produced with the `|*` and `|@` runes are wet. (`|*` and `|@` are the wet versions of `|=` and `|%`, respectively.)
4242
@@ -189,7 +189,7 @@ As is the case with dry arms, there is a type-check associated with each wet arm
189189
190190### Parametric Polymorphism and `+*` Arms
191191
192−In Chapter 2 we saw how to use the `+*` rune to define an arm that produced a more complex type from one or more simpler types. This rune provides a way of making use of *parametric polymorphism* in Hoon.
192+In Chapter 2 we saw how to use the `+*` rune to define an arm that produced a more complex type from one or more simpler types. This rune provides a way of making use of **parametric polymorphism** in Hoon.
193193
194194For example, we have `list`s, `tree`s, and `set`s in Hoon, which are each defined in `hoon.hoon` with `+*` arms. (Take a moment to see for yourself.) Each `+*` arm is followed by an argument definition, inside brackets `[ ]`. After that subexpression comes another that defines a type, relative to the input value. For example, here is the definition of `list` from `hoon.hoon`:
195195
@@ -203,7 +203,7 @@ For example, we have `list`s, `tree`s, and `set`s in Hoon, which are each define
203203 $@(~ [i=item t=(list item)])
204204```
205205
206−The `+*` rune is especially useful for defining [containers](https://en.wikipedia.org/wiki/Container_(abstract_data_type%29) of various kinds. Indeed, `list`s, `tree`s, and `set`s are all examples of containers. You can have a `(list @)`, a `(list ^)`, a `(list *)`, and so on. Or a `(tree @)`, a `(tree ^)`, a `(tree *)`, etc. And the same for `set`.
206+The `+*` rune is especially useful for defining [containers](https://en.wikipedia.org/wiki/Container_%28abstract_data_type%29) of various kinds. Indeed, `list`s, `tree`s, and `set`s are all examples of containers. You can have a `(list @)`, a `(list ^)`, a `(list *)`, and so on. Or a `(tree @)`, a `(tree ^)`, a `(tree *)`, etc. And the same for `set`.
207207
208208One nice thing about containers defined by `+*` is that they nest in the expected way. Intuitively a `(list @)` should nest under `(list *)`, because `@` nests under `*`. And so it does:
209209
@@ -295,14 +295,14 @@ The payload types of `A` and `B` must also be checked. Certain payload nesting
295295
296296But there are different sets of nesting rules for finishing the payload type check, depending on the variance properties of the core.
297297
298−There are four kinds of cores: *gold* (invariant payload), *iron* (contravariant sample), *zinc* (covariant sample), and *lead* (bivariant sample). Information about the kind of core is tracked by the Hoon type system.
298+There are four kinds of cores: **gold** (invariant payload), **iron** (contravariant sample), **zinc** (covariant sample), and **lead** (bivariant sample). Information about the kind of core is tracked by the Hoon type system.
299299
300300Their nesting rules in brief:
301301
302−+ If `A` is a gold core, then core `B` nests under it only if `B` is gold and the payload of `B` doesn't vary in type from the payload of `A`. The payload `B` is *invariant* (i.e., neither co- nor contravariant) relative to the payload of an `A` it nests under. Gold cores have a read-write payload.
303−+ If `A` is an iron core, then core `B` nests under it only if `B` is gold or iron and the sample of `A` nests under the sample of `B`. Notice that the nesting direction of the samples is the opposite of the nesting direction of the cores. I.e., the sample types are *contravariant* with respect to the iron core types. Iron cores have a write-only sample and an opaque context. ("Opaque" means neither read nor write.)
304−+ If `A` is a zinc core, then core `B` nests under it only if `B` is gold or zinc and the sample of `B` nests under the sample of `A`. Notice that the nesting direction of the samples is the same as the nesting direction of the cores. I.e., the sample types are *covariant* with respect to the zinc core types. Zinc cores have a read-only sample and an opaque context.
305−+ If `A` is a lead core, then core `B` nests under it without any additional payload check beyond those described in the previous section. It trivially follows that the payload type both co- and contravaries with respect to the lead core types (hence lead cores are *bivariant*). Lead cores have an opaque payload.
302++ If `A` is a gold core, then core `B` nests under it only if `B` is gold and the payload of `B` doesn't vary in type from the payload of `A`. The payload `B` is **invariant** (i.e., neither co- nor contravariant) relative to the payload of an `A` it nests under. Gold cores have a read-write payload.
303++ If `A` is an iron core, then core `B` nests under it only if `B` is gold or iron and the sample of `A` nests under the sample of `B`. Notice that the nesting direction of the samples is the opposite of the nesting direction of the cores. I.e., the sample types are **contravariant** with respect to the iron core types. Iron cores have a write-only sample and an opaque context. ("Opaque" means neither read nor write.)
304++ If `A` is a zinc core, then core `B` nests under it only if `B` is gold or zinc and the sample of `B` nests under the sample of `A`. Notice that the nesting direction of the samples is the same as the nesting direction of the cores. I.e., the sample types are **covariant** with respect to the zinc core types. Zinc cores have a read-only sample and an opaque context.
305++ If `A` is a lead core, then core `B` nests under it without any additional payload check beyond those described in the previous section. It trivially follows that the payload type both co- and contravaries with respect to the lead core types (hence lead cores are **bivariant**). Lead cores have an opaque payload.
306306
307307Let's go through each kind more carefully.
308308
@@ -402,9 +402,9 @@ The sample type of an iron gate is contravariant. This means that, when doing a
402402
403403Why is this a useful nesting rule for passing gates?
404404
405−Let's say you're writing a function `F` that takes as input some gate `G`. Let's also say you want `G` to be able to take as input any *mammal*. The code of `F` is going to pass arbitrary *mammals* to `G`, so that `G` needs to know how to handle all *mammals* correctly. You can't pass `F` a gate that only takes *dogs* as input, because `F` might call it with a *cat*. But `F` can accept a gate that takes all *animals* as input, because a gate that can handle any *animal* can handle *any mammal*.
405+Let's say you're writing a function `F` that takes as input some gate `G`. Let's also say you want `G` to be able to take as input any **mammal**. The code of `F` is going to pass arbitrary **mammals** to `G`, so that `G` needs to know how to handle all **mammals** correctly. You can't pass `F` a gate that only takes **dogs** as input, because `F` might call it with a **cat**. But `F` can accept a gate that takes all **animals** as input, because a gate that can handle any **animal** can handle **any mammal**.
406406
407−Iron cores are designed precisely with this purpose in mind. The reason that the sample is write-only is that we want to be able to assume, within function `F`, that the sample of `G` is a *mammal*. But that might not be true when `G` is first passed into `F` -- the default value of `G` could be another *animal*, say, a *lizard*. So we restrict looking into the sample of `G` by making the sample write-only. The illusion is maintained and type safety secured.
407+Iron cores are designed precisely with this purpose in mind. The reason that the sample is write-only is that we want to be able to assume, within function `F`, that the sample of `G` is a **mammal**. But that might not be true when `G` is first passed into `F` -- the default value of `G` could be another **animal**, say, a **lizard**. So we restrict looking into the sample of `G` by making the sample write-only. The illusion is maintained and type safety secured.
408408
409409Let's illustrate iron core nesting properties:
410410
learn/hoon/style.md+12−12
@@ -185,15 +185,15 @@ two or more spaces apart. These lines can be collapsed:
185185
186186## General naming style
187187
188−Modern Hoon naming is *verbose*.
188+Modern Hoon naming is **verbose**.
189189
190−*Never*: abbreviate a label; pack characters (try to reduce the
190+**Never**: abbreviate a label; pack characters (try to reduce the
191191length of labels, or make lengths match up between parallel
192192labels); use intentionally vague and meaningless words; or use
193193nonsense text that isn't a word.
194194
195−It can't be repeated too often: *do not abbreviate words, unless
196−you would use the same abbreviations in written English*. To
195+It can't be repeated too often: **do not abbreviate words, unless
196+you would use the same abbreviations in written English**. To
197197save a trivial, one-time amount of work in typing, you are adding
198198a nontrivial amount of work and ambiguity in reading.
199199
@@ -215,7 +215,7 @@ more spaces, newlines, or comments are one gap.
215215#### Comment conventions
216216
217217Hoon suggests "breathing comments." There should always be an
218−empty comment line between a comment and the line *below* it:
218+empty comment line between a comment and the line **below** it:
219219
220220```
221221 :: look, code
@@ -247,7 +247,7 @@ standard.
247247
248248Crowded comments are considered harmful -- don't use them. Hoon,
249249like any higher-order functional language, can be very dense and
250−powerful. We almost never want it to be *more* dense.
250+powerful. We almost never want it to be **more** dense.
251251
252252#### Megalithic comments
253253
@@ -286,7 +286,7 @@ complex.
286286
287287A simple formal comment is a one-line headline. A headline is
288288optional whitespace; then `::`; then two spaces; then a parsed
289−line of *lowercase* ASCII whose syntax depends on the comment
289+line of **lowercase** ASCII whose syntax depends on the comment
290290type. Like this:
291291
292292```
@@ -342,7 +342,7 @@ The headline is a string in parentheses:
342342
343343### Flow comments and legends
344344
345−Flow comments use a new commenting concept called *legends*.
345+Flow comments use a new commenting concept called **legends**.
346346
347347#### Legends
348348
@@ -373,7 +373,7 @@ could write flow comments as follows:
373373 visit-holland
374374```
375375
376−The headline of a flow comment uses a *legend*: the name of
376+The headline of a flow comment uses a **legend**: the name of
377377this leg in the parent rune, then a message,
378378
379379For someone who doesn't know Hoon, these pseudo-keywords are
@@ -449,8 +449,8 @@ conventions in this document has earned a C. Weird indents,
449449cryptic or abbreviated names, etc, etc, preclude an A or B
450450grade -- regardless of documentation.
451451
452−A Hoon file gets a B if and only if *every symbol in the file is
453−defined, where introduced, by a formal comment*. You do not get
452+A Hoon file gets a B if and only if **every symbol in the file is
453+defined, where introduced, by a formal comment**. You do not get
454454to make up a name without writing a one-line definition.
455455
456456For an A, there are two criteria.
@@ -471,4 +471,4 @@ when I send some `%foobar` move, I should define what I think
471471
472472Code shouldn't even try for an A until it is quite stable. The worst
473473thing in the world is code that changes without updating the documentation.
474−Any *incorrect* comment in a file drops it all the way back to a D.
474+Any **incorrect** comment in a file drops it all the way back to a D.
learn/hoon/workbook/list.md+5−5
@@ -39,13 +39,13 @@ In our example program, we use comments with line numbers for convenient referen
3939|= end=@
4040```
4141
42−There's a few things going on in our first line. The first part of it, `|=`, is a kind of *rune*. Runes are the building blocks of all Hoon code, represented as a pair of non-alphanumeric ASCII characters. Runes form expressions; runes are used how keywords are used in other languages. In other words, all computations in Hoon ultimately require runes. Runes and other Hoon expressions are all separated from one another by either two spaces or a line break.
42+There's a few things going on in our first line. The first part of it, `|=`, is a kind of **rune**. Runes are the building blocks of all Hoon code, represented as a pair of non-alphanumeric ASCII characters. Runes form expressions; runes are used how keywords are used in other languages. In other words, all computations in Hoon ultimately require runes. Runes and other Hoon expressions are all separated from one another by either two spaces or a line break.
4343
4444All runes take a fixed number of "children." Children can themselves be runes with children, and Hoon programs work by chaining through these until a value -- not another rune -- is arrived at. For this reason, we very rarely need to close expressions. Keep this scheme in mind when examining Hoon code.
4545
46−The specific purpose of the `|=` rune is to create a *gate*. A gate is what would be called a function in other languages: it takes an input, performs a specified computation, and then produces an output.
46+The specific purpose of the `|=` rune is to create a **gate**. A gate is what would be called a function in other languages: it takes an input, performs a specified computation, and then produces an output.
4747
48−Because we're only on line 1, all we're doing with the gate is creating it, and then specifying what kind of input the gate takes with that rune's first child: `end=@`. The `end` part of our code is simply a name that we give to the user's input so that we can use the number later. `=@` means that we restrict the kind of input that our gate accepts to the *atom* type, or `@` for short. An atom is a natural number.
48+Because we're only on line 1, all we're doing with the gate is creating it, and then specifying what kind of input the gate takes with that rune's first child: `end=@`. The `end` part of our code is simply a name that we give to the user's input so that we can use the number later. `=@` means that we restrict the kind of input that our gate accepts to the **atom** type, or `@` for short. An atom is a natural number.
4949
5050Our program is simple, so the _entire program_ is the gate that's being created here. The rest of our lines of code are part of the second child of our gate, and they determine how our gate produces an output.
5151
@@ -94,7 +94,7 @@ In this case, the rune specifies that our gate's output must be `(list @)` -- th
9494
9595## Line 7
9696
97−`:-` is a rune that creates a *cell*, an ordered pair of two values, such as `[1 2]`. It takes two children.
97+`:-` is a rune that creates a **cell**, an ordered pair of two values, such as `[1 2]`. It takes two children.
9898
9999In our case, `:- count` creates a cell out of whatever value is stored in `count`, and then with the product of line 8.
100100
@@ -106,7 +106,7 @@ $(count (add 1 count))
106106
107107The above code is, once again, a compact way of writing a rune expression. All you need to know is that this line of code restarts the program at `|-`, except with the value stored in `count` incremented by 1. The construction of `(count (add 1 count))` tells the computer, "replace the value of count with count+1".
108108
109−You'll notice that we use an unfamiliar word here: `add`. Unlike `count` and `end`, `add` is not defined anywhere in our program. That's because it's a gate that's predefined in the Hoon *standard library*. The standard library is filled with pre-defined gates that are generally useful, and these gates can be used just like something that you defined in your own program. You can see this gate, and other mathematical operators, in [section 1a](/docs/reference/library/1a) of the standard-library documentation.
109+You'll notice that we use an unfamiliar word here: `add`. Unlike `count` and `end`, `add` is not defined anywhere in our program. That's because it's a gate that's predefined in the Hoon **standard library**. The standard library is filled with pre-defined gates that are generally useful, and these gates can be used just like something that you defined in your own program. You can see this gate, and other mathematical operators, in [section 1a](/docs/reference/library/1a) of the standard-library documentation.
110110
111111## Explanation
112112
learn/hoon/workbook/recursion.md+2−2
@@ -79,7 +79,7 @@ into the `mul` functions behind them.
7979##### Tail-Call Optimization
8080
8181Our last example isn't a very efficient use computing resources. The
82−pyramid-shaped illustration approximates what's happening on the *call stack*, a
82+pyramid-shaped illustration approximates what's happening on the **call stack**, a
8383memory structure that tracks the instructions of the program. In our example
8484code, every time a parent gate calls another gate, the gate being called is
8585"pushed" to the top of the stack in the form of a frame. This process continues
@@ -100,7 +100,7 @@ produced data to the frame below it. This process continues until the stack
100100is empty, giving us the gate's output.
101101
102102When a program's final expression uses the stack in this way, it's considered to
103−be *not tail-recursive*. This usually happens when the last line of executable
103+be **not tail-recursive**. This usually happens when the last line of executable
104104code calls more than one gate, our example code's `(mul n $(n (dec n)))` being
105105such a case. That's because such an expression needs to hold each iteration of
106106`$(n (dec n)` in memory so that it can know what to run against the `mul`
learn/nock/definition.md+5−5
@@ -134,7 +134,7 @@ A formula `[5 b c]` treats `b` and `c` as formulas that become the input to anot
134134Instructions `6` through `11` are not strictly necessary for Turing completeness; deleting them
135135from Nock would decrease compactness, but not expressiveness.
136136
137−`[6 b c d]` is *if* `b`, *then* `c`, *else* `d`. Each of `b`,
137+`[6 b c d]` is **if** `b`, **then** `c`, **else** `d`. Each of `b`,
138138`c`, `d` is a formula against the subject. Remember that `0` is
139139true and `1` is false.
140140
@@ -152,9 +152,9 @@ Hoon; `d` is a `core` (object), `e` points to an arm (method).)
152152
153153In a formula `[10 [b c] d]`, `c` and `d` are computed with the current subject, and then `b` of the product of `d` is replaced with the product of `c`.
154154
155−`[11 b c]` is a *hint* semantically equivalent to the formula
156−`c`. If `b` is an atom, it's a *static hint*, which is just
157−discarded. If `b` is a cell, it's a *dynamic* hint; the head of
155+`[11 b c]` is a **hint** semantically equivalent to the formula
156+`c`. If `b` is an atom, it's a **static hint**, which is just
157+discarded. If `b` is a cell, it's a **dynamic** hint; the head of
158158`b` is discarded, and the tail of `b` is executed as a formula
159159against the current subject; the product of this is discarded.
160160
@@ -170,7 +170,7 @@ The reader might wonder how an interpreter whose only arithmetic
170170operation is increment can ever be practical.
171171
172172The short answer is that a Nock interpreter doesn't have to use
173−the algorithm above. It just has to get the *same result* as the
173+the algorithm above. It just has to get the **same result** as the
174174algorithm above.
175175
176176The algorithm for decrementing an atom is to count up to it, an
learn/nock/example.md+6−6
@@ -33,7 +33,7 @@ Thus:
3333
3434Of course, increment is built into Nock. So, ha, that's easy.
3535
36−The best way to learn Nock is to *stop reading right now*, and
36+The best way to learn Nock is to **stop reading right now**, and
3737go write your own decrement formula. There's no substitute for
3838doing it yourself. But the second best way is faster...
3939
@@ -133,7 +133,7 @@ Let's continue with our decrement. So what's `g`? We seem to
133133loop. Does Nock have a loop instruction? It most certainly does
134134not. So what do we do?
135135
136−We build a noun called a *core* - a construct which is behind any
136+We build a noun called a **core** - a construct which is behind any
137137kind of interesting control flow in Hoon. Of course, the Nock
138138programmer is not constrained to use the same techniques as the
139139Hoon compiler, but it is probably a good idea.
@@ -144,17 +144,17 @@ objects are cores, modules are cores, even loops are cores.
144144
145145The core is just a cell whose tail is data (possibly containing
146146other cores) and whose head is code (containing one or more
147−formulas). The tail is the *payload* and the head is the
148−*battery*. Hence your core is
147+formulas). The tail is the **payload** and the head is the
148+**battery**. Hence your core is
149149
150150```
151151[bat pay]
152152```
153153
154154To activate a core, pick a formula out of the battery, and use
155−the entire core (*not* just the payload) as the subject.
155+the entire core (**not** just the payload) as the subject.
156156
157−(A core formula is called an *arm*. An arm is almost like an
157+(A core formula is called an **arm**. An arm is almost like an
158158object-oriented method, but not quite - a method would be an arm
159159that produces a function on an argument. The arm is just a
160160function of the core, ie, a computed attribute.)
learn/nock/explanation.md+4−4
@@ -18,7 +18,7 @@ XML and XML look like ASN.1. It may also remind you of Lisp's
1818S-expressions - you can think of nouns as "S-expressions without
1919the S."
2020
21−To be exact, a noun *is* an S-expression, except that classic
21+To be exact, a noun **is** an S-expression, except that classic
2222S-expressions have multiple atom types ("S" is for "symbol").
2323Since Nock is designed to be used with a higher-level type system
2424(such as Hoon's), it does not need low-level types. An atom is
@@ -89,7 +89,7 @@ Normally `a` in `nock(a)` is a cell `[s f]`, or as we say
8989Intuitively, the formula is your function and the subject is
9090its argument. We call them something different because Hoon,
9191or any other high-level language built on Nock, will build its
92−own function calling convention which *does not* map directly
92+own function calling convention which **does not** map directly
9393to `*[subject formula]`.
9494
9595### Noun syntax
@@ -364,7 +364,7 @@ We could write this line less formally:
364364In other words, if you have two Nock formulas `x` and `y`, a
365365formula that computes the pair of them is just `[x y]`. We can
366366recognize this because no atom is a valid formula, and
367−every formula that *does not* use distribution has an atomic head.
367+every formula that **does not** use distribution has an atomic head.
368368
369369If you know Lisp, you can think of this feature as a sort of
370370"implicit cons." Where in Lisp you would write `(cons x y)`,
@@ -515,7 +515,7 @@ depends both on the original subject and the new variable.
515515```
516516
517517With `c`, we produce a noun which contains both code and data - a
518−*core*. We use this core as the subject, and evaluate the
518+**core**. We use this core as the subject, and evaluate the
519519formula within it at slot `b`.
520520
521521### `6`, if-then-else
learn/vere/api.md+29−29
@@ -54,14 +54,14 @@ use `u3m_soft_sure()`, `u3m_soft_slam()`, or `u3m_soft_nock()`
5454for C functions, Hoon function calls, and Nock invocations.
5555Caution - this returns just the result, and asserts globally.
5656
57−All the `u3m_soft` functions above work *only on the surface*.
57+All the `u3m_soft` functions above work **only on the surface**.
5858Within the surface, virtualize with `u3m_soft_run()`. Note that
5959this takes a `fly` (a namespace gate), thus activating the `11`
6060super-operator in the nock virtualizer, `++mock`. When actually
6161using the `fly`, call `u3m_soft_esc()`. Don't do either unless
6262you know what you're doing!
6363
64−For descending into a subroad *without* Nock virtualization,
64+For descending into a subroad **without** Nock virtualization,
6565use `u3m_hate()` and `u3m_love` respectively. Hating enters
6666a subroad; loving leaves it, copying out a product noun.
6767
@@ -87,7 +87,7 @@ dumber than most) - `u3j` is the most interesting code in `u3`.
8787
8888Let's consider the minor miracle of driver-to-battery binding
8989which lets `u3j` work - and decrement not be `O(n)` - without
90−violating the precisely defined semantics of pure Nock, *ever*.
90+violating the precisely defined semantics of pure Nock, **ever**.
9191
9292It's easy to assume that jets represent an architectural coupling
9393between Hoon language semantics and Nock interpreter internals.
@@ -108,7 +108,7 @@ code]`, any high-level language transforming itself to Nock would
108108use this design.
109109
110110So jets are in fact fully general. Broadly speaking, the jet
111−system works by matching a C *driver* to a battery. When the
111+system works by matching a C **driver** to a battery. When the
112112battery is invoked with Nock operator `9`, it must be found in
113113associative memory and linked to its driver. Then we link the
114114formula axis of the operation (`a` in `[9 a b]`) to a specific
@@ -141,7 +141,7 @@ nock(+.a -.a)
141141Then, naturally, when we go from Hoon or a high-level language
142142containing functions down to Nock, `[function arguments]` turns
143143into `[formula subject]`. This seems like an obvious design, and
144−we mention it only because it is *completely wrong*.
144+we mention it only because it is **completely wrong**.
145145
146146Rather, to execute a one-armed core like the above, we run
147147
@@ -250,7 +250,7 @@ in `j/tree.c`. The data structures:
250250 } u3j_dash;
251251```
252252
253−Warm and cold state is *per road*. In other words, as we nest
253+Warm and cold state is **per road**. In other words, as we nest
254254roads, we also nest jet state. The jet state in the road is:
255255
256256```
@@ -330,7 +330,7 @@ we don't need (cleaning these things up is tricky), but just gets
330330flattened into a term.
331331
332332The parent axis is a nock formula, but always reduces to a simple
333−axis, which is the address of this core's *parent*. Consider
333+axis, which is the address of this core's **parent**. Consider
334334again an ordinary gate
335335
336336```
@@ -340,13 +340,13 @@ again an ordinary gate
340340Typically the `context` is itself a library core, which itself
341341has a jet binding. If so, the parent axis of this gate is `7`.
342342
343−If the parent is already bound - and the parent *must* be already
343+If the parent is already bound - and the parent **must** be already
344344bound, in this road or a road containing it - we can hook this core
345345bottom-up into a tree hierarchy. Normally the child core is
346346produced by an arm of the parent core, so this is not a problem -
347347we wouldn't have the child if we hadn't already made the parent.
348348
349−The clue also contains a list of *hooks*, named nock formulas on
349+The clue also contains a list of **hooks**, named nock formulas on
350350the core. Usually these are arms, but they need not be. The
351351point is that we often want to call a core from C, in a situation
352352where we have no type or other source information. A common case
@@ -365,14 +365,14 @@ instance, if the core is a Hoon gate - a function - we will call
365365### u3j: the cold jet dashboard
366366
367367For even more fun, the jet tree is not actually a tree of
368−batteries. It's a tree of battery *labels*, where a label is
368+batteries. It's a tree of battery **labels**, where a label is
369369an [axis term] path from the root of the tree. (At the root,
370370if the core pattern is always followed properly, is a core whose
371371payload is an atomic constant, conventionally the Hoon version.)
372372
373373Under each of these labels, it's normal to have an arbitrary
374374number of different Nock batteries (not just multiple copies
375−of the same noun, a situation we *do* strive to avoid). For
375+of the same noun, a situation we **do** strive to avoid). For
376376instance, one might be compiled with debugging hints, one not.
377377
378378We might even have changed the semantics of the battery without
@@ -420,7 +420,7 @@ of information: the `++cope`, or per-location noun; and a map of
420420batteries to a per-battery `++club`.
421421
422422The `cope` is a triple of `++bane` (battery name, right now just
423−a `term`); `++axis`, the axis, within *this* core, of the parent;
423+a `term`); `++axis`, the axis, within **this** core, of the parent;
424424and `(each bash noun)`, which is either `[0 bash]` if the parent
425425is another core, or `[1 noun]`, for the constant noun (like
426426`164`) if there is no parent core.
@@ -453,7 +453,7 @@ validate with a single comparison. Otherwise, we have to recurse
453453upward by checking the parent.
454454
455455Note that there is at present no way to force a jet to depend on
456−static *data*.
456+static **data**.
457457
458458### u3j: the warm jet dashboard
459459
@@ -519,7 +519,7 @@ in the `u3j_harm` which tell us how to call the arm function.
519519
520520If `ice` is yes (`&`, `0`), the jet is known to be perfect and we
521521can just trust the product of `fun_f`. Otherwise, we need to run
522−*both* the Nock arm and `fun_f`, and compare their results.
522+**both** the Nock arm and `fun_f`, and compare their results.
523523
524524(Note that while executing the C side of this test, we have to
525525set `ice` to yes; on the Nock side, we have to set `liv` to no.
@@ -531,9 +531,9 @@ test is on the outermost layer of recursion.)
531531environment has a slight locking problem with these flags if arm
532532testing is multi-threaded.)
533533
534−If `tot` is yes, (`&`, `0`), the arm function is *total* and has
535−to return properly (though it can still return *u3_none*).
536−Otherwise, it is *partial* and can `u3_cm_bail()` out with
534+If `tot` is yes, (`&`, `0`), the arm function is **total** and has
535+to return properly (though it can still return **u3_none**).
536+Otherwise, it is **partial** and can `u3_cm_bail()` out with
537537c3__punt. This feature has a cost: the jet runs in a subroad.
538538
539539Finally, if `liv` is no (`|`, 1), the jet is off and doesn't run.
@@ -570,10 +570,10 @@ caller passes the entire core, which is retained if the function
570570returns `u3_none`, transferred otherwise. Why? Again, use
571571counts of 1 are special and precious for performance hackers.
572572
573−`u3q` interfaces break the core into C arguments, *retain* noun
574−arguments, and *transfer* noun returns. `u3k` interfaces are the
573+`u3q` interfaces break the core into C arguments, **retain** noun
574+arguments, and **transfer** noun returns. `u3k` interfaces are the
575575same, except with more use of `u3_none` and other simple C
576−variations on the Hoon original, but *transfer* both arguments
576+variations on the Hoon original, but **transfer** both arguments
577577and returns. Generally, `u3k` are most convenient for new code.
578578
579579Following `u3k/q/w` is `[a-f]`, corresponding to the 6 logical
@@ -586,7 +586,7 @@ For instance, `++add` is `u3wa_add(cor)`, `u3qa_add(a, b)`, or
586586`u3wdb_get(cor)`, `u3kdb_get(a, b)`, etc, in `j/d/by_get.c`.
587587
588588For historical reasons, all internal jet code in `j/[a-f]`
589−*retains* noun arguments, and *transfers* noun results. Please
589+**retains** noun arguments, and **transfers** noun results. Please
590590do not do this in new `g` jets! The new standard protocol is to
591591transfer both arguments and results.
592592
@@ -604,13 +604,13 @@ the macros `u3k()` and `u3z()` respectively.
604604Normally we create nouns through `u3i` functions, and don't call
605605the `u3a` allocators directly. But if you do:
606606
607−One, there are *two* sets of allocators: the word-aligned
607+One, there are **two** sets of allocators: the word-aligned
608608allocators and the fully-aligned (ie, malloc compatible)
609609allocators. For instance, on a typical OS X setup, malloc
610610produces 16-byte aligned results - needed for some SSE
611611instructions.
612612
613−These allocators are *not compatible*. For 32-bit alignment
613+These allocators are **not compatible**. For 32-bit alignment
614614as used in nouns, call
615615
616616```
@@ -670,7 +670,7 @@ allocate a block of raw space with `u3a_slab()`, then chop off
670670the end with `u3a_malt()` (which does the measuring itself)
671671or `u3a_mint()` in case you've measured it yourself.
672672
673−Once again, *do not call `malloc()`* (or C++ `new`) within any
673+Once again, **do not call `malloc()`** (or C++ `new`) within any
674674code that may be run within a jet. This will cause rare sporadic
675675corruption when we interrupt execution within a `malloc()`. We'd
676676just override the symbol, but `libuv` uses `malloc()` across
@@ -687,7 +687,7 @@ would expect, quite slow. (There is no such thing as a fast tree
687687interpreter.)
688688
689689There is only one Nock, but there are lots of ways to call it.
690−(Remember that all `u3n` functions *transfer* C arguments and
690+(Remember that all `u3n` functions **transfer** C arguments and
691691returns.)
692692
693693The simplest interpreter, `u3n_nock_on(u3_noun bus, u3_noun fol)`
@@ -696,7 +696,7 @@ invokes Nock on `bus` (the subject) and `fol` (the formula).
696696reason `0` is true and `1` is false.)
697697
698698A close relative is `u3n_slam_on(u3_noun gat, u3_noun sam)`,
699−which slams a *gate* (`gat`) on a sample (`sam`). (In a normal
699+which slams a **gate** (`gat`) on a sample (`sam`). (In a normal
700700programming language which didn't talk funny and was retarded,
701701`u3n_slam_on()` would call a function on an argument.) We could
702702write it most simply as:
@@ -715,7 +715,7 @@ write it most simply as:
715715```
716716
717717Simpler is `u3n_kick_on(u3_noun gat)`, which slams a gate (or,
718−more generally, a *trap* - because sample structure is not even
718+more generally, a **trap** - because sample structure is not even
719719needed here) without changing its sample:
720720
721721```
@@ -850,7 +850,7 @@ of `axis`, `u3_noun *`. For cells, triples, etc, decompose with
850850`u3r_pq()` and friends.
851851
852852`u3r_sing(u3_noun a, u3_noun b)` (true if `a` and `b` are a
853−*single* noun) are interesting because it uses mugs to help it
853+**single** noun) are interesting because it uses mugs to help it
854854out. Clearly, different nouns may have the same mug, but the
855855same nouns cannot have a different mug. It's important to
856856understand the performance characteristics of `u3r_sing()`:
@@ -907,7 +907,7 @@ the memoization facility is a general-purpose cache.
907907(It's also used for partial memoization - a feature that'll
908908probably be removed, in which conservative worklist algorithms
909909(which would otherwise be exponential) memoize everything in the
910−subject *except* the worklist. This is used heavily in the Hoon
910+subject **except** the worklist. This is used heavily in the Hoon
911911compiler jets (j/f/*.c). Unfortunately, it's probably not
912912possible to make this work perfectly in that it can't be abused
913913to violate Nock, so we'll probably remove it at a later date,
learn/vere/c.md+1−1
@@ -54,7 +54,7 @@ and 1 as false (always say "no").
5454Nock and/or Hoon cannot tell the difference between a short atom
5555and a long one, but at the `u3` level every atom under `2^31` is
5656direct. The `c3_l` type is useful to annotate this. A `c3_m` is
57−a *mote* - a string of up to 4 characters in a `c3_l`, least
57+a **mote** - a string of up to 4 characters in a `c3_l`, least
5858significant byte first. A `c3_g` should be a 5-bit atom. Of
5959course, C cannot enforce these constraints, only document them.
6060
learn/vere/nouns.md+10−10
@@ -106,7 +106,7 @@ look over your code again.)
106106
107107### u3: reference protocols
108108
109−*THIS IS THE MOST CRITICAL SECTION IN THE `u3` DOCUMENTATION.*
109+**THIS IS THE MOST CRITICAL SECTION IN THE `u3` DOCUMENTATION.**
110110
111111The key question when calling a C function in a refcounted world
112112is what the function will do to the noun refcounts - and, if the
@@ -176,8 +176,8 @@ depends on where it is, not what it does. Follow the convention.
176176
177177### u3: reference conventions
178178
179−The `u3` convention is that, unless otherwise specified, *all
180−functions have transfer semantics* - with the exception of the
179+The `u3` convention is that, unless otherwise specified, **all
180+functions have transfer semantics** - with the exception of the
181181prefixes: `u3r`, `u3x`, `u3z`, `u3q` and `u3w`. Also, within
182182jet directories `a` through `f` (but not `g`), internal functions
183183retain (for historical reasons).
@@ -228,8 +228,8 @@ stack grows downward and the heap (malloc arena) grows upward:
228228```
229229
230230A road is a normal heap-stack system, except that the heap
231−and stack can point in *either direction*. Therefore, inside
232−a road, we can nest another road in the *opposite direction*.
231+and stack can point in **either direction**. Therefore, inside
232+a road, we can nest another road in the **opposite direction**.
233233
234234When the opposite road completes, its heap is left on top of
235235the opposite heap's stack. It's no more than the normal
@@ -239,13 +239,13 @@ their results on the stack.
239239The performance tradeoff of "leaping" - reversing directions in
240240the road - is that if the outer computation wants to preserve the
241241results of the inner one, not just use them for temporary
242−purposes, it has to *copy them*.
242+purposes, it has to **copy them**.
243243
244244This is a trivial cost in some cases, a prohibitive cost in
245245others. The upside, of course, is that all garbage accrued
246246in the inner computation is discarded at zero cost.
247247
248−The goal of the road system is the ability to *layer* memory
248+The goal of the road system is the ability to **layer** memory
249249models. If you are allocating on a road, you have no idea
250250how deep within a nested road system you are - in other words,
251251you have no idea exactly how durable your result may be.
@@ -308,14 +308,14 @@ But... why?
308308We're now ready to understand why the road system works so
309309logically with the event and persistence model.
310310
311−The key is that *we don't update refcounts in senior memory.*
311+The key is that **we don't update refcounts in senior memory.**
312312A pointer from an inner road to an outer road is not counted.
313313Also, the outmost, or `surface` road, is the only part of the
314314image that gets checkpointed.
315315
316316So the surface road contains the entire durable state of `u3`.
317317When we process an event, or perform any kind of complicated or
318−interesting calculation, *we process it in an inner road*. If
318+interesting calculation, **we process it in an inner road**. If
319319its results are saved, they need to be copied.
320320
321321Since processing in an inner road does not touch surface memory,
@@ -377,7 +377,7 @@ ie: does the pier's home road equal the current road pointer?
377377
378378Normally in this context you assume you're obeying the rules of
379379running on an inner road, ie, "deep memory." Remember, however,
380−that the interpreter *can* run on surface memory - but anything
380+that the interpreter **can** run on surface memory - but anything
381381you can do deep, you can do on the surface. The converse is by
382382no means the case.
383383
reference/hoon-expressions/advanced.md+8−8
@@ -3,9 +3,9 @@ title = "Advanced Types"
33weight = 5
44template = "doc.html"
55+++
6−The definition of `type` in the 'Basic Types' section is only a simplified version. The Hoon type system is simple, but not *that* simple.
6+The definition of `type` in the 'Basic Types' section is only a simplified version. The Hoon type system is simple, but not **that** simple.
77
8−The good news is that you can *skip this section*, at least when
8+The good news is that you can **skip this section**, at least when
99you're first learning Hoon. Polymorphism and aliasing are mainly
1010for advanced programmers writing complex infrastructure and/or
1111large functions. Don't worry about them for a little while.
@@ -101,19 +101,19 @@ worry if you don't know it. These rules should make sense if you
101101just think about them intuitively.
102102
103103Each core has a "metal" `r.p.q` which defines its variance model.
104−A core can be *invariant* (`%gold`), *bivariant* (`%lead`),
105−*covariant* (`%zinc`), or *contravariant* (`%iron`). The default
104+A core can be **invariant** (`%gold`), **bivariant** (`%lead`),
105+**covariant** (`%zinc`), or **contravariant** (`%iron`). The default
106106is gold; a gold core can be cast or converted to any metal, and
107107any metal can be cast or converted to lead.
108108
109109A gold core `a` has a read-write payload; another core `b` that
110110nests within it (i.e., can be substituted for it) must be a gold
111111core whose payload is mutually compatible (`+3.a` nests in `+3.b`,
112−`+3.b` nests in `+3.a`). Hence, *invariant*.
112+`+3.b` nests in `+3.a`). Hence, **invariant**.
113113
114114A lead core `a` has an opaque payload. There is no constraint on
115115the payload of a core `b` which nests within it. Hence,
116−*bivariant*.
116+**bivariant**.
117117
118118(_Opaque_ here means that the faces and arms are not exported into
119119the namespace, and that the values of faces and arms can't be written to.
@@ -123,12 +123,12 @@ safety.)
123123An iron core `a` has a write-only sample (payload head, `+6.a`)
124124and an opaque context (payload tail, `+7.a`). A core `b` which
125125nests within it must be a gold or iron core, such that `+6.a`
126−nests within `+6.b`. Hence, *contravariant*.
126+nests within `+6.b`. Hence, **contravariant**.
127127
128128A zinc core `a` has a read-only sample (payload head, `+6.a`)
129129and an opaque context (payload tail, `+7.a`). A core `b` which
130130nests within it must be a gold or zinc core, such that `+6.b`
131−nests within `+6.a`. Hence, *covariant*.
131+nests within `+6.a`. Hence, **covariant**.
132132
133133### Wet arms
134134
reference/hoon-expressions/basic.md+9−9
@@ -90,11 +90,11 @@ digit only, infix hyphen, first character must be a lowercase letter.
9090
9191`%atom` is for an atom, with two twists. `q` is a `unit`, Hoon's
9292equivalent of a nullable pointer or a Haskell `Maybe`. If `q`
93−is `~`, null, the type is *warm*; any atom is in the type.
94−If `q` is `[~ x]`, where `x` is any atom, the type is *cold*;
93+is `~`, null, the type is **warm**; any atom is in the type.
94+If `q` is `[~ x]`, where `x` is any atom, the type is **cold**;
9595its only legal value is the constant `x`.
9696
97−`p` in the atom is a terminal used as an *aura*, or soft atom
97+`p` in the atom is a terminal used as an **aura**, or soft atom
9898type. Auras are a lightweight, advisory representation of the
9999units, semantics, and/or syntax of an atom. An aura is an atomic
100100string; two auras are compatible if one is a prefix of the other.
@@ -149,27 +149,27 @@ dependently typed and can't statically enforce data constraints
149149
150150### `[%core p=type q=(map term hoon)]`
151151
152−`%core` is for a code-data cell. The data (or *payload*) is the
153−tail; the code (or *battery*) is the head. `p`, a type, is the
152+`%core` is for a code-data cell. The data (or **payload**) is the
153+tail; the code (or **battery**) is the head. `p`, a type, is the
154154type of the payload. `q` is a mapping of arm names and Hoon expressions. It is the source code for the core battery.
155155
156156(For an introduction to cores and arms, see Chapter 1 of the Hoon tutorial.)
157157
158158Each expression in the battery source is compiled to a formula, with
159159the core itself as the subject. The battery is a tree of these
160−formulas, or *arms*. An arm is a computed attribute against its
160+formulas, or **arms**. An arm is a computed attribute against its
161161core.
162162
163163All code-data structures in normal languages (functions, objects,
164164modules, etc) become cores in Hoon. A Hoon battery looks a bit
165165like a method table, but not every arm is a "method" in the OO
166166sense. An arm is a computed attribute. A method is an arm whose
167−product is a Hoon function (or *gate*).
167+product is a Hoon function (or **gate**).
168168
169169A gate (function, lambda, etc) is a core with one arm, whose name
170170is the empty symbol `$`, and a payload whose shape is `[sample
171−context]`. The *context* is the subject in which the gate was
172−defined; the *sample* is the argument.
171+context]`. The **context** is the subject in which the gate was
172+defined; the **sample** is the argument.
173173
174174To call this function on an argument `x`, replace the sample (at
175175tree address `6` in the core) with `x`, then compute the arm.
reference/hoon-expressions/limb/_index.md+1−1
@@ -6,7 +6,7 @@ template = "sections/docs/chapters.html"
66+++
77One feature Hoon lacks: a context that isn't a first-class value. Hoon has no
88concept of scope, environment, etc. An expression has exactly one data source,
9−the *subject*, a noun like any other.
9+the **subject**, a noun like any other.
1010
1111## [Limbs](limb)
1212
reference/hoon-expressions/limb/limb.md+3−3
@@ -7,7 +7,7 @@ A limb is an attribute of subject.
77
88### Produces
99
10−There are two kinds of limbs: arms and legs. An *arm* is a computation of some core. A *leg* is a piece of data in the subject.
10+There are two kinds of limbs: arms and legs. An **arm** is a computation of some core. A **leg** is a piece of data in the subject.
1111
1212If a limb expression resolves to a leg, the leg is produced. If a limb expression resolves to an arm -- in particular, by way of an arm name -- then the arm is computed with its parent core as the subject. The result of that computation is produced.
1313
@@ -29,9 +29,9 @@ Irregular: `+<-` is "take the tail, then take the head of that, then the head of
2929
3030### Traverse
3131
32−Name resolution happens by way of a search through the subject. The search traverse takes a name `q` and a *skip count* `p`.
32+Name resolution happens by way of a search through the subject. The search traverse takes a name `q` and a **skip count** `p`.
3333
34−The search product may be an *arm* or a *leg*. A *leg* is a subtree of the subject. An arm is a Nock formula paired with a core to compute the result. You can think of the limb as an attribute -- computation or subtree, "synthesized" or "natural"
34+The search product may be an **arm** or a **leg**. A **leg** is a subtree of the subject. An arm is a Nock formula paired with a core to compute the result. You can think of the limb as an attribute -- computation or subtree, "synthesized" or "natural"
3535-- of the subject.
3636
3737We search the subject type headfirst, depth-first, and pre-order.
reference/hoon-expressions/rune/bar.md+3−3
@@ -15,7 +15,7 @@ with changes, which useful for recursion among other things:
1515
1616### |_ "barcab"
1717
18−Produce a *door* (a core with a sample).
18+Produce a **door** (a core with a sample).
1919
2020##### Syntax
2121
@@ -40,7 +40,7 @@ AST:
4040
4141##### Semantics
4242
43−The product of a `|_` expression is a *door*, a core with one or more arms whose payload includes a sample. That is, a door is a cell of `[battery [sample context]]`, where the `battery` contains one or more arms.
43+The product of a `|_` expression is a **door**, a core with one or more arms whose payload includes a sample. That is, a door is a cell of `[battery [sample context]]`, where the `battery` contains one or more arms.
4444
4545`a` defines the door sample type and usually includes a name assignment (e.g., `n=@`). `a` is followed by a series of arm definitions, each of which begins with a rune in the `+` family (most of `++`). There must be at least one arm, but there may be arbitrarily many. Each arm must include a name (`b`, `d`, and `f` above), which is followed by the expression (`c`, `e`, and `g` above) that defines the arm product.
4646
@@ -519,7 +519,7 @@ AST:
519519
520520##### Definition
521521
522−The product of a `|=` expression is a dry *gate*, i.e., a Hoon function.
522+The product of a `|=` expression is a dry **gate**, i.e., a Hoon function.
523523
524524`p` defines the gate sample type -- i.e., the input value type -- and usually includes a sample name assignment (e.g., `a=@`). `q` is an expression that determines the output value of the gate.
525525
reference/hoon-expressions/rune/buc.md+13−13
@@ -12,7 +12,7 @@ among other things. A factory/mold is used as a data validator.
1212
1313## Overview
1414
15−A correct mold is a *normalizer*: an idempotent function across
15+A correct mold is a **normalizer**: an idempotent function across
1616all nouns. If the sample of a gate has type `%noun`, and its
1717body obeys the constraint that for any x, `=((mold x) (mold (mold
1818x)))`, it's a normalizer and can be used as a mold.
@@ -63,14 +63,14 @@ Irregular: `*` makes `%noun`, `^` makes `%cell`, `?` makes
6363
6464##### Syntax
6565
66−Regular: *1-fixed*.
66+Regular: **1-fixed**.
6767
6868Irregular: `_foo` is `$_(foo)`.
6969
7070##### Discussion
7171
7272`$_` discards the sample it's supposedly normalizing
73−and produces its *example* instead.
73+and produces its **example** instead.
7474
7575##### Examples
7676
@@ -97,7 +97,7 @@ The default of the last item `i` in `p`. Crashes if `p` is empty.
9797
9898##### Syntax
9999
100−Regular form: *2-running*.
100+Regular form: **2-running**.
101101
102102##### Discussion
103103
@@ -132,7 +132,7 @@ The tuple the length of `p`.
132132
133133##### Syntax
134134
135−Regular: *running*.
135+Regular: **running**.
136136
137137Irregular (noun mode): `,[a b c]` is `$:(a b c)`.
138138Irregular (structure mode): `[a b c]` is `$:(a b c)`.
@@ -165,11 +165,11 @@ $_ ^|
165165
166166##### Syntax
167167
168−Regular: *2-fixed*.
168+Regular: **2-fixed**.
169169
170170##### Discussion
171171
172−Since a `$-` reduces to a [`$_`](#buccab), it is not useful for normalizing, just for typechecking. In particular, the existence of `$-`s does *not* let us send gates or other cores over the network!
172+Since a `$-` reduces to a [`$_`](#buccab), it is not useful for normalizing, just for typechecking. In particular, the existence of `$-`s does **not** let us send gates or other cores over the network!
173173
174174##### Examples
175175
@@ -195,7 +195,7 @@ The default of `p`.
195195
196196##### Syntax
197197
198−Regular: *2-fixed*.
198+Regular: **2-fixed**.
199199
200200##### Examples
201201
@@ -228,7 +228,7 @@ The product of `p`.
228228
229229##### Syntax
230230
231−Regular: *2-fixed*.
231+Regular: **2-fixed**.
232232
233233```
234234$~ p=hoon q=spec
@@ -292,12 +292,12 @@ The default of `p`.
292292
293293#### Syntax
294294
295−Regular: *2-fixed*.
295+Regular: **2-fixed**.
296296
297297Product: a structure which applies `p` if its sample is an atom,
298298`q` if its sample is a cell.
299299
300−Regular form: *2-fixed*.
300+Regular form: **2-fixed**.
301301
302302Example:
303303
@@ -328,7 +328,7 @@ Example:
328328
329329##### Syntax
330330
331−Regular: *2-fixed*.
331+Regular: **2-fixed**.
332332
333333Irregular (structure mode): `foo=baz` is `$=(foo baz)`.
334334
@@ -366,7 +366,7 @@ The first item in `p`.
366366
367367##### Syntax
368368
369−Regular: *running*.
369+Regular: **running**.
370370
371371Irregular: `?(%foo %baz)` is `$?(%foo %baz)`.
372372
reference/hoon-expressions/rune/cen.md+1−1
@@ -446,7 +446,7 @@ at slot `+6` with `baz`, and then resolving to the `$` limb, you might think
446446
447447But it's actually `=+(foo =>(%=(+2 +6 baz) $))`. Even if `foo` is
448448a wing, we would just be mutating `+6` within the core that defines the
449−`foo` arm. Instead we want to modify the *product* of `foo` -- the gate
449+`foo` arm. Instead we want to modify the **product** of `foo` -- the gate
450450-- so we have to pin it into the subject.
451451
452452Here's that again in tall form:
reference/hoon-expressions/rune/col.md+8−8
@@ -19,7 +19,7 @@ The `:` ("col") expressions are used to produce cells, which are pairs of values
1919
2020##### Syntax
2121
22−Regular: *2-fixed*.
22+Regular: **2-fixed**.
2323
2424##### Examples
2525
@@ -57,7 +57,7 @@ The cell of `p` and `q`.
5757
5858##### Syntax
5959
60−Regular: *2-fixed*.
60+Regular: **2-fixed**.
6161
6262Irregular: `[a b]` is `:-(a b)`.
6363
@@ -107,7 +107,7 @@ compiler does), `[a b]` is the same as `:-(a b)`.
107107
108108##### Syntax
109109
110−Regular: *4-fixed*.
110+Regular: **4-fixed**.
111111
112112##### Examples
113113
@@ -135,7 +135,7 @@ Regular: *4-fixed*.
135135
136136##### Syntax
137137
138−Regular: *3-fixed*.
138+Regular: **3-fixed**.
139139
140140##### Examples
141141
@@ -155,7 +155,7 @@ Regular: *3-fixed*.
155155
156156##### Expands to
157157
158−*Pseudocode*: `a`, `b`, `c`, ... as elements of `p`:
158+**Pseudocode**: `a`, `b`, `c`, ... as elements of `p`:
159159
160160```
161161:-(a :-(b :-(c :-(... :-(z ~)))))
@@ -173,7 +173,7 @@ $(p t.p)
173173
174174##### Syntax
175175
176−Regular: *running*.
176+Regular: **running**.
177177
178178##### Examples
179179
@@ -199,7 +199,7 @@ Regular: *running*.
199199
200200##### Expands to
201201
202−*Pseudocode*: `a`, `b`, `c`, ... as elements of `p`:
202+**Pseudocode**: `a`, `b`, `c`, ... as elements of `p`:
203203
204204```
205205:-(a :-(b :-(c :-(... z)))))
@@ -219,7 +219,7 @@ $(p t.p)
219219
220220##### Syntax
221221
222−Regular: *running*.
222+Regular: **running**.
223223
224224##### Examples
225225
reference/hoon-expressions/rune/dot.md+4−4
@@ -92,7 +92,7 @@ You can modify the time of the file listing quite simply and ask for a listing f
9292
9393##### Syntax
9494
95−Regular: *1-fixed*.
95+Regular: **1-fixed**.
9696
9797Irregular: `+(6)` is `.+(6)`.
9898
@@ -122,7 +122,7 @@ Nock of formula `q` and subject `p`, with type `%noun`.
122122
123123##### Syntax
124124
125−Regular: *2-fixed*.
125+Regular: **2-fixed**.
126126
127127##### Discussion
128128
@@ -165,7 +165,7 @@ therefore possible to use Hoon as a typeless language.
165165
166166##### Syntax
167167
168−Regular: *2-fixed*.
168+Regular: **2-fixed**.
169169
170170Irregular: `=(a b)` is `.=(a b)`.
171171
@@ -209,7 +209,7 @@ nest-fail
209209
210210##### Syntax
211211
212−Regular: *1-fixed*.
212+Regular: **1-fixed**.
213213
214214##### Examples
215215
reference/hoon-expressions/rune/ket.md+10−10
@@ -22,7 +22,7 @@ it never allows invalid nests, it sometimes rejects valid nests.
2222
2323##### Syntax
2424
25−Regular: *1-fixed*.
25+Regular: **1-fixed**.
2626
2727##### Discussion
2828
@@ -58,7 +58,7 @@ A gate that returns the sample value if it's of the correct type, but crashes ot
5858
5959##### Syntax
6060
61−Regular: *1-fixed*.
61+Regular: **1-fixed**.
6262
6363##### Discussion
6464
@@ -96,7 +96,7 @@ ford: %ride failed to execute:
9696
9797##### Syntax
9898
99−Regular: *2-fixed*.
99+Regular: **2-fixed**.
100100
101101```
102102^. p=hoon q=hoon
@@ -137,7 +137,7 @@ mint-vain
137137
138138##### Syntax
139139
140−Regular: *2-fixed*.
140+Regular: **2-fixed**.
141141
142142Irregular: `` `foo`baz`` is `^-(foo baz)`.
143143
@@ -179,7 +179,7 @@ The value of `q` with the type of `p`, if the type of `q` nests within the type
179179
180180##### Syntax
181181
182−Regular: *2-fixed*.
182+Regular: **2-fixed**.
183183
184184##### Examples
185185
@@ -198,7 +198,7 @@ Regular: *2-fixed*.
198198
199199##### Syntax
200200
201−Regular: *1-fixed*.
201+Regular: **1-fixed**.
202202
203203##### Discussion
204204
@@ -251,7 +251,7 @@ ford: %ride failed to compute type:
251251
252252##### Syntax
253253
254−Regular: *1-fixed*.
254+Regular: **1-fixed**.
255255
256256##### Examples
257257
@@ -273,7 +273,7 @@ A default value (i.e., 'bunt value') of the type `p`.
273273
274274##### Syntax
275275
276−Regular: *1-fixed*.
276+Regular: **1-fixed**.
277277
278278```
279279^* p=spec
@@ -326,7 +326,7 @@ may also be a tuple of terms, or a term-skin pair; the type of
326326
327327##### Syntax
328328
329−Regular: *2-fixed*.
329+Regular: **2-fixed**.
330330
331331Irregular: `foo=baz` is `^=(foo baz)`.
332332
@@ -360,7 +360,7 @@ a=1
360360
361361##### Syntax
362362
363−Regular: *1-fixed*.
363+Regular: **1-fixed**.
364364
365365##### Discussion
366366
reference/hoon-expressions/rune/lus.md+5−5
@@ -17,7 +17,7 @@ Chapter label.
1717
1818##### Syntax
1919
20−Regular: *1-fixed*.
20+Regular: **1-fixed**.
2121
2222```
2323+| %label
@@ -25,7 +25,7 @@ Regular: *1-fixed*.
2525
2626##### Discussion
2727
28−The `+|` doesn't produce an arm. It instead provides a label for the arms that follow it. The arms of a core can be divided into *chapters* for 'organization'. Chapter labels aren't part of the underlying noun of the core; they're stored as type system metadata only.
28+The `+|` doesn't produce an arm. It instead provides a label for the arms that follow it. The arms of a core can be divided into **chapters** for 'organization'. Chapter labels aren't part of the underlying noun of the core; they're stored as type system metadata only.
2929
3030See `tome` in the Hoon standard library.
3131
@@ -65,7 +65,7 @@ Produce a structure arm (type definition).
6565
6666##### Syntax
6767
68−Regular: *2-fixed*.
68+Regular: **2-fixed**.
6969
7070```
7171+$ p=term q=spec
@@ -103,7 +103,7 @@ Produce a normal arm.
103103
104104##### Syntax
105105
106−Regular: *2-fixed*.
106+Regular: **2-fixed**.
107107
108108```
109109++ p=term q=hoon
@@ -139,7 +139,7 @@ Produce a type constructor arm.
139139
140140##### Syntax
141141
142−Regular: *2-fixed*.
142+Regular: **2-fixed**.
143143
144144```
145145+* p=term [q=term] r=spec
reference/hoon-expressions/rune/mic.md+8−8
@@ -13,7 +13,7 @@ Miscellaneous useful macros.
1313
1414##### Expands to
1515
16−*Pseudocode*: `a`, `b`, `c`, ... as elements of `q`:
16+**Pseudocode**: `a`, `b`, `c`, ... as elements of `q`:
1717
1818Regular form:
1919
@@ -40,7 +40,7 @@ Irregular form:
4040
4141##### Syntax
4242
43−Regular: *1-fixed*, then *running*.
43+Regular: **1-fixed**, then **running**.
4444
4545Irregular: `:(add a b c)` is `;:(add a b c)`.
4646
@@ -67,7 +67,7 @@ A `marl`, i.e., a list of `manx`. A `manx` is a noun that represents a single X
6767
6868##### Syntax
6969
70−*1-fixed*
70+**1-fixed**
7171
7272```
7373;+ p=hoon
@@ -132,7 +132,7 @@ a
132132
133133##### Syntax
134134
135−Regular: *2-fixed*.
135+Regular: **2-fixed**.
136136
137137##### Examples
138138
@@ -186,7 +186,7 @@ The gates in `q` are composed together using the gate `p` as an intermediate fun
186186
187187##### Expands to
188188
189−*Note: these are structurally correct, but elide some type-system complexity.*
189+**Note: these are structurally correct, but elide some type-system complexity.**
190190
191191`;~(a b)` reduces to `b`.
192192
@@ -234,7 +234,7 @@ conditional application.
234234
235235##### Syntax
236236
237−Regular: *1-fixed*, then *running*.
237+Regular: **1-fixed**, then **running**.
238238
239239##### Examples
240240
@@ -283,7 +283,7 @@ A `marl`, i.e., a list of `manx`. A `manx` is a noun that represents a single X
283283
284284##### Syntax
285285
286−*1-fixed*
286+**1-fixed**
287287
288288```
289289;* p=hoon
@@ -335,7 +335,7 @@ A `marl`, i.e., a list of `manx`. A `manx` is a noun that represents a single X
335335
336336##### Syntax
337337
338−*running*
338+**running**
339339
340340```
341341;= p=hoon q=hoon ... z=hoon ==
reference/hoon-expressions/rune/sig.md+11−11
@@ -18,7 +18,7 @@ to computation.
1818
1919##### Syntax
2020
21−Regular: *2-fixed*. For the dynamic form, write `%term.hoon`.
21+Regular: **2-fixed**. For the dynamic form, write `%term.hoon`.
2222
2323##### Discussion
2424
@@ -57,7 +57,7 @@ Prettyprints `p` in stack trace if `q` crashes.
5757
5858##### Syntax
5959
60−Regular: *2-fixed*.
60+Regular: **2-fixed**.
6161
6262##### Examples
6363
@@ -86,7 +86,7 @@ If profiling is on, adds 1 to the hit counter for `p`.
8686
8787##### Syntax
8888
89−Regular: *2-fixed*.
89+Regular: **2-fixed**.
9090
9191##### Examples
9292
@@ -139,7 +139,7 @@ the named formulas `r`, constructed by `s`.
139139
140140##### Syntax
141141
142−Regular: *4-fixed*. For `r`, use `~` if empty. Otherwise, *jogging*
142+Regular: **4-fixed**. For `r`, use `~` if empty. Otherwise, **jogging**
143143between opening and closing `==`.
144144
145145##### Discussion
@@ -187,7 +187,7 @@ already registered.
187187
188188Registers a jet in core `s` so that it can be called when that code is run.
189189
190−Regular form: *4-fixed*
190+Regular form: **4-fixed**
191191
192192##### Examples
193193
@@ -226,7 +226,7 @@ product.
226226
227227##### Syntax
228228
229−Regular: *2-fixed*. For the dynamic form, write `%term.hoon`.
229+Regular: **2-fixed**. For the dynamic form, write `%term.hoon`.
230230
231231##### Discussion
232232
@@ -259,7 +259,7 @@ transient in the current event).
259259
260260##### Syntax
261261
262−Regular: *1-fixed*.
262+Regular: **1-fixed**.
263263
264264##### Examples
265265
@@ -297,7 +297,7 @@ registered context.
297297
298298##### Syntax
299299
300−Regular: *2-fixed*.
300+Regular: **2-fixed**.
301301
302302##### Examples
303303
@@ -331,7 +331,7 @@ It's most useful for debugging programs.
331331
332332##### Syntax
333333
334−Regular: *2-fixed*.
334+Regular: **2-fixed**.
335335
336336##### Examples
337337
@@ -392,7 +392,7 @@ If `p` is true, prettyprints `q` on the console before computing `r`.
392392
393393##### Syntax
394394
395−Regular: *4-fixed*.
395+Regular: **4-fixed**.
396396
397397##### Examples
398398
@@ -430,7 +430,7 @@ If compilation of `q` fails, prints the type of `p` in the trace.
430430
431431##### Syntax
432432
433−Regular: *2-fixed*.
433+Regular: **2-fixed**.
434434
435435##### Examples
436436
reference/hoon-expressions/rune/tis.md+16−16
@@ -33,7 +33,7 @@ the product of `q`, with the product of `p` taken as the subject.
3333
3434##### Syntax
3535
36−Regular: *2-fixed*.
36+Regular: **2-fixed**.
3737
3838##### Examples
3939
@@ -58,7 +58,7 @@ Regular: *2-fixed*.
5858
5959##### Syntax
6060
61−Regular: *2-fixed*.
61+Regular: **2-fixed**.
6262
6363##### Discussion
6464
@@ -89,7 +89,7 @@ Speaking more loosely, `=|` usually "declares a variable" which is "uninitialize
8989
9090##### Syntax
9191
92−Regular: *jogging*, then *1-fixed*.
92+Regular: **jogging**, then **1-fixed**.
9393
9494##### Discussion
9595
@@ -114,7 +114,7 @@ This rune is like `=.`, but for modifying the values of multiple legs of the sub
114114
115115##### Syntax
116116
117−Regular: *2-fixed*.
117+Regular: **2-fixed**.
118118
119119##### Examples
120120
@@ -153,7 +153,7 @@ With a dojo-defined face:
153153
154154##### Syntax
155155
156−Regular: *3-fixed*.
156+Regular: **3-fixed**.
157157
158158##### Discussion
159159
@@ -189,7 +189,7 @@ nest-fail
189189
190190##### Syntax
191191
192−Regular: *2-fixed*.
192+Regular: **2-fixed**.
193193
194194##### Discussion
195195
@@ -219,7 +219,7 @@ a leg with the tail.
219219
220220##### Syntax
221221
222−Regular: *4-fixed*.
222+Regular: **4-fixed**.
223223
224224##### Discussion
225225
@@ -258,7 +258,7 @@ random number, so we use `=^`:
258258
259259##### Syntax
260260
261−Regular: *2-fixed*.
261+Regular: **2-fixed**.
262262
263263Irregular: `foo:baz` is `=<(foo baz)`.
264264
@@ -296,7 +296,7 @@ Irregular: `foo:baz` is `=<(foo baz)`.
296296
297297##### Syntax
298298
299−Regular: *2-fixed*.
299+Regular: **2-fixed**.
300300
301301##### Discussion
302302
@@ -318,7 +318,7 @@ Loosely speaking, `=+` is the simplest way of "declaring a variable."
318318
319319##### Syntax
320320
321−Regular: *3-fixed*.
321+Regular: **3-fixed**.
322322
323323##### Discussion
324324
@@ -341,13 +341,13 @@ Regular: *3-fixed*.
341341
342342##### Expands to
343343
344−*if `p` is a name*, (e.g. `a`):
344+**if `p` is a name**, (e.g. `a`):
345345
346346```
347347=+(^=(p q) r)
348348```
349349
350−*if `p` is a name with a type* (e.g., `a=@`):
350+**if `p` is a name with a type** (e.g., `a=@`):
351351
352352```
353353=+(^-(p q) r)
@@ -365,7 +365,7 @@ r
365365
366366##### Syntax
367367
368−Regular: *3-fixed*.
368+Regular: **3-fixed**.
369369
370370##### Discussion
371371
@@ -395,7 +395,7 @@ The product of the chain composition.
395395
396396##### Syntax
397397
398−Regular: *running*.
398+Regular: **running**.
399399
400400##### Examples
401401
@@ -430,7 +430,7 @@ Regular: *running*.
430430
431431##### Syntax
432432
433−Regular: *3-fixed*.
433+Regular: **3-fixed**.
434434
435435##### Discussion
436436
@@ -466,7 +466,7 @@ s
466466
467467##### Syntax
468468
469−Regular: *4-fixed*.
469+Regular: **4-fixed**.
470470
471471##### Discussion
472472
reference/hoon-expressions/rune/wut.md+19−19
@@ -13,7 +13,7 @@ expressions.
1313
1414All `?` runes reduce to `?:` and/or `?=`.
1515
16−If the condition of an `?:` is a `?=`, *and* the `?=` is
16+If the condition of an `?:` is a `?=`, **and** the `?=` is
1717testing a leg of the subject, the compiler specializes the subject
1818type for the branches of the `?:`. Branch inference also works
1919for expressions which expand to `?:`.
@@ -21,7 +21,7 @@ for expressions which expand to `?:`.
2121The test does not have to be a single `?=`; the compiler can
2222analyze arbitrary boolean logic ([`?&` ("wutpam")](#wutpam),
2323[`?|` ("wutbar")](#wutbar), [`?!` ("wutzap")](#wutzap)) with full
24−short-circuiting. Equality tests ([`.=` ("dottis")](docs/reference/hoon-expressions/rune/dot#tis/)) are *not*
24+short-circuiting. Equality tests ([`.=` ("dottis")](docs/reference/hoon-expressions/rune/dot#tis/)) are **not**
2525analyzed.
2626
2727If the compiler detects that the branch is degenerate (only one
@@ -41,7 +41,7 @@ side is taken), it fails with an error.
4141
4242##### Syntax
4343
44−Regular: *2-fixed*.
44+Regular: **2-fixed**.
4545
4646##### Discussion
4747
@@ -73,7 +73,7 @@ nest-fail
7373
7474##### Expands to
7575
76−*Pseudocode*: `a`, `b`, `c`, ... as elements of `p`:
76+**Pseudocode**: `a`, `b`, `c`, ... as elements of `p`:
7777
7878```
7979?:(a & ?:(b & ?:(c & ?:(... ?:(z & |)))))
@@ -92,7 +92,7 @@ $(p t.p)
9292
9393##### Syntax
9494
95−Regular: *running*.
95+Regular: **running**.
9696
9797Irregular: `|(foo bar baz)` is `?|(foo bar baz)`.
9898
@@ -123,7 +123,7 @@ If test analysis reveals that either branch is never taken, or if `p` is not a b
123123
124124##### Syntax
125125
126−Regular: *3-fixed*.
126+Regular: **3-fixed**.
127127
128128##### Discussion
129129
@@ -166,7 +166,7 @@ Note also that all other branching expressions reduce to `?:`.
166166
167167##### Syntax
168168
169−Regular: *3-fixed*.
169+Regular: **3-fixed**.
170170
171171##### Discussion
172172
@@ -197,7 +197,7 @@ As is usual with inverted forms, use `?.` when the yes-case expression is much t
197197
198198##### Expands to
199199
200−*Pseudocode*: `a`, `b`, `c`, ... as elements of `q`:
200+**Pseudocode**: `a`, `b`, `c`, ... as elements of `q`:
201201
202202```
203203?: ?=(p.a p) q.a
@@ -220,7 +220,7 @@ $(q t.q)
220220
221221##### Syntax
222222
223−Regular: *1-fixed*, then *jogging*.
223+Regular: **1-fixed**, then **jogging**.
224224
225225##### Discussion
226226
@@ -266,7 +266,7 @@ of the subject is a cell.
266266
267267##### Syntax
268268
269−Regular: *3-fixed*.
269+Regular: **3-fixed**.
270270
271271##### Discussion
272272
@@ -301,7 +301,7 @@ The type of the wing, `p`, must not be known to be either an atom or a cell, or
301301
302302##### Syntax
303303
304−Regular: *2-fixed*.
304+Regular: **2-fixed**.
305305
306306##### Discussion
307307
@@ -334,7 +334,7 @@ a union, with a default.
334334
335335##### Expands to
336336
337−*Pseudocode*: `a`, `b`, `c`, ... as elements of `r`:
337+**Pseudocode**: `a`, `b`, `c`, ... as elements of `r`:
338338
339339```
340340?: ?=(p.a p) q.a
@@ -357,7 +357,7 @@ $(r t.r)
357357
358358##### Syntax
359359
360−Regular: *2-fixed*, then *jogging*.
360+Regular: **2-fixed**, then **jogging**.
361361
362362##### Discussion
363363
@@ -390,7 +390,7 @@ If there is a case that is never taken you'll get a `mint-vain` error.
390390
391391##### Expands to
392392
393−*Pseudocode*: `a`, `b`, `c`, ... as elements of `p`:
393+**Pseudocode**: `a`, `b`, `c`, ... as elements of `p`:
394394
395395```
396396?.(a | ?.(b | ?.(c | ?.(... ?.(z | &)))))
@@ -409,7 +409,7 @@ $(p t.p)
409409
410410##### Syntax
411411
412−Regular: *running*.
412+Regular: **running**.
413413
414414Irregular: `&(foo bar baz)` is `?&(foo bar baz)`.
415415
@@ -435,7 +435,7 @@ Irregular: `&(foo bar baz)` is `?&(foo bar baz)`.
435435
436436##### Syntax
437437
438−Regular: *3-fixed*.
438+Regular: **3-fixed**.
439439
440440##### Discussion
441441
@@ -460,7 +460,7 @@ It's bad style to use `?~` to test for any zero atom. Use it only for a true nu
460460
461461##### Syntax
462462
463−Regular: *2-fixed*.
463+Regular: **2-fixed**.
464464
465465##### Discussion
466466
@@ -498,7 +498,7 @@ A common error is `find.$`, meaning `p` is not a type.
498498
499499##### Syntax
500500
501−Regular: *3-fixed*.
501+Regular: **3-fixed**.
502502
503503##### Discussion
504504
@@ -532,7 +532,7 @@ Produces the logical NOT of `p`.
532532
533533##### Syntax
534534
535−Regular: *1-fixed*.
535+Regular: **1-fixed**.
536536
537537Irregular: `!foo` is `?!(foo)`.
538538
reference/hoon-expressions/rune/zap.md+5−5
@@ -15,7 +15,7 @@ A cell whose tail is the product of `p`, and whose head is the static type of `p
1515
1616##### Syntax
1717
18−Regular: *1-fixed*.
18+Regular: **1-fixed**.
1919
2020##### Discussion
2121
@@ -45,7 +45,7 @@ The product of `p` unless `p` crashes, in which case a stack trace is given.
4545
4646##### Syntax
4747
48−Regular: *1-fixed*.
48+Regular: **1-fixed**.
4949
5050```
5151!: p=hoon
@@ -77,7 +77,7 @@ The product of `p`. If `p` crashes, no stack trace entries are given for that co
7777
7878##### Syntax
7979
80−Regular: *1-fixed*.
80+Regular: **1-fixed**.
8181
8282```
8383!. p=hoon
@@ -121,7 +121,7 @@ The Nock generated by `p`.
121121
122122##### Syntax
123123
124−Regular: *1-fixed*.
124+Regular: **1-fixed**.
125125
126126##### Discussion
127127
@@ -163,7 +163,7 @@ The syntax difference is that a test for equality takes two subexpressions, and
163163
164164##### Syntax
165165
166−Regular: *2-fixed*.
166+Regular: **2-fixed**.
167167
168168##### Examples
169169
reference/library/2b.md+1−1
@@ -965,7 +965,7 @@ is the continuation of the RNG.
965965Gate to list, with state
966966
967967Accepts a `list` `a` and a gate `b`. `c` is internal state, initially
968−derived by *bunting* the tail of the sample of gate `b`, instead of
968+derived by **bunting** the tail of the sample of gate `b`, instead of
969969being passed in explicitly as in `++spin`. Produces a list with the
970970gate applied to each element of the original list. `b` is called with a tuple --
971971the head is an element of `a` and the tail is the state `c`, and should
reference/library/3c.md+2−2
@@ -453,8 +453,8 @@ An atom.
453453A year is a leap-year if:
454454
455455- it's divisible by 4;
456−- *unless* it's divisible by 100;
457−- *or* if it's divisible by 400.
456+- **unless** it's divisible by 100;
457+- **or** if it's divisible by 400.
458458
459459---
460460### `++hor:yo`
reference/troubleshooting.md+6−6
@@ -20,7 +20,7 @@ a correct Hoon file. These values are always correct.
2020Usually, the line and column tell you everything you need to
2121know. But the worst-case scenario for a syntax error is that,
2222somewhere above, you've confused Hoon's tall form by using the
23−wrong fanout for a rune. For example, `%+` ([*cenlus*](/docs/reference/hoon-expressions/rune/cen#cenlus),
23+wrong fanout for a rune. For example, `%+` ([**cenlus**](/docs/reference/hoon-expressions/rune/cen#cenlus),
2424a function call whose sample is a cell) has three subhoons:
2525
2626```
@@ -100,7 +100,7 @@ means you tried to pound a square peg into a round hole.
100100What was the peg and what was the hole? Hoon doesn't tell you by
101101default, because moral fiber, and also because in too many cases
102102trivial errors lead to large intimidating dumps. However, you
103−can use the `~!` rune ([*sigzap*](/docs/reference/hoon-expressions/rune/sig#sigzap)) to print the type of
103+can use the `~!` rune ([**sigzap**](/docs/reference/hoon-expressions/rune/sig#sigzap)) to print the type of
104104any hoon in your stack trace.
105105
106106For instance, you wrote `(foo bar)` and got a `nest-fail`. Change
@@ -130,7 +130,7 @@ function.
130130
131131These are errors caused by type inference in pattern matching.
132132`mint-vain` means this hoon is never executed. `mint-lost` means
133−there's a case in a `?-` ([*wuthep*](/docs/reference/hoon-expressions/rune/wut#wuthep)) that isn't handled.
133+there's a case in a `?-` ([**wuthep**](/docs/reference/hoon-expressions/rune/wut#wuthep)) that isn't handled.
134134
135135## Runtime crashes
136136
@@ -144,7 +144,7 @@ infinite loop will time out either too slowly or too fast). The
144144stack trace will show what your code was doing when interrupted.
145145
146146The counterpart of `~!` for runtime crashes is `~|`
147−([*sigbar*](/docs/reference/hoon-expressions/rune/sig#sigbar)):
147+([**sigbar**](/docs/reference/hoon-expressions/rune/sig#sigbar)):
148148
149149```
150150~| foo
@@ -160,7 +160,7 @@ The worst possibility, of course, is that your code runs but does
160160the wrong thing. This is relatively unusual in a typed
161161functional language, but it still happens.
162162
163−`~&` ([*sigpad*](/docs/reference/hoon-expressions/rune/sig#sigpad)) is Hoon's debugging printf.
163+`~&` ([**sigpad**](/docs/reference/hoon-expressions/rune/sig#sigpad)) is Hoon's debugging printf.
164164This pretty-prints its argument:
165165
166166```
@@ -169,7 +169,7 @@ This pretty-prints its argument:
169169```
170170
171171will always print `foo` every time it executes. A variant is
172−`~?` ([*sigwut*](/docs/reference/hoon-expressions/rune/sig#sigwut)), which prints only if a condition is
172+`~?` ([**sigwut**](/docs/reference/hoon-expressions/rune/sig#sigwut)), which prints only if a condition is
173173true:
174174
175175```
using/admin.md−2
@@ -156,8 +156,6 @@ in this example.
156156
157157Put `<key>` in a file and that file becomes `<keyfile>`.
158158
159−*`<keyfile>` must not have a trailing newline.*
160−
161159Another way of generating `<keyfile>` is:
162160
163161```
using/filesystem.md+5−5
@@ -140,7 +140,7 @@ The structure that combines a `beak` with further path information is called a
140140##### Relative paths
141141
142142The `%` command, which we gestured at in the above section, represents the
143−*relative path*, which is the path where you are currently working. If your
143+**relative path**, which is the path where you are currently working. If your
144144working directory is just your home desk, indicated by the
145145prompt `~your-planet:dojo>`, then running the command below will print your
146146working directory's `beam` information: your `beak`, and a `~` that represents
@@ -259,7 +259,7 @@ Syntax: `|mount /clay/path [Unix-name]`
259259
260260Mount the `clay-path` at the Unix mount point `Unix-name`.
261261
262−*Examples:*
262+**Examples:**
263263
264264```
265265|mount %/web
@@ -281,7 +281,7 @@ Mounts `%/gen` to `/generators` inside your pier directory.
281281
282282Unmount the path or name from Unix.
283283
284−*Examples:*
284+**Examples:**
285285
286286```
287287|unmount %/web
@@ -304,7 +304,7 @@ Merges a `beak` into a `desk` using an optional merge `strategy`.
304304A `beak` is a ship-desk-case triple, encoded as a
305305path(`/~dozbud/home/2`)
306306
307−*Examples:*
307+**Examples:**
308308
309309```
310310|merge %home-work /=home=, =gem %fine
@@ -329,7 +329,7 @@ defaulted to being the same as `desk`. Non-comet urbits have
329329planet that issued a moon, the star that issued a planet, or the galaxy
330330that issued a star).
331331
332−*Examples:*
332+**Examples:**
333333
334334```
335335|sync %home-local ~dozbud %home
using/generators.md+8−8
@@ -165,7 +165,7 @@ This entire structure is a noun, which is why `*` is a valid sample if we
165165wish to not use any of the information here in a generator. But let's look at
166166each of these three elements, piece by piece.
167167
168−The *first part* of the above 3-tuple is a noun that is composed of three
168+The **first part** of the above 3-tuple is a noun that is composed of three
169169atoms:
170170
171171`now` is the current time.
@@ -184,7 +184,7 @@ Any of those pieces of data could be omitted by replacing part of the noun with
184184`*` rather than giving them faces. For example, `[now=@da * bec=beak]` if we
185185didn't want `eny`, or `[* * bec=beak]` if we only wanted `beak`.
186186
187−The *second part* of the sample is a `list` of arguments that _must_ be passed
187+The **second part** of the sample is a `list` of arguments that _must_ be passed
188188to the generator as it is run. Because it's a `list`, this element needs to be
189189terminated with a `~`. In the example above, we used `~`, the empty list, to
190190represent this second part. But that would mean we don't want to use any new
@@ -205,7 +205,7 @@ But to use both parts together, our gate and sample would look like this:
205205|= [[now=@da eny=@uvJ bec=beak] [n=@ud ~] ~]
206206```
207207
208−The *third part* of the sample is a list of _optional_ arguments. These
208+The **third part** of the sample is a list of _optional_ arguments. These
209209arguments may be passed to the program as it's being run, but the program doesn't
210210require them. The syntax for the third part is just like the syntax for the
211211second part, besides its position:
@@ -292,7 +292,7 @@ in at the time of initiation.
292292
293293Code-wise, two things are needed to create a useful `%ask` generator.
294294
295−The first is *`sole-result`*, which lives in `/sur/sole.hoon`. It's a
295+The first is **`sole-result`**, which lives in `/sur/sole.hoon`. It's a
296296mold-builder that's required by any part of Arvo, such as the Dojo, that wants
297297to understand the output of the `%ask` generator. Because it's the only type of
298298`%ask` data that is intelligible to the system, the ultimate output of an `%ask`
@@ -300,7 +300,7 @@ generator must be `sole-result`. You can think of it as a function that takes
300300molds and digests them into a type for the operating system. The simplest way to
301301use `sole-result` is by calling the `produce` gate from `/lib/generators.hoon`.
302302
303−The second is *`prompt`*, a gate that lives in `lib/generators.hoon`. `prompt`
303+The second is **`prompt`**, a gate that lives in `lib/generators.hoon`. `prompt`
304304allows you to get information back from the user, which is essential to the
305305typical desired operation of an `%ask` generator.
306306
@@ -408,13 +408,13 @@ for printing backstep-indented lists.
408408Because we imported `generators`, we can access its contained gates, three of
409409which we use in `axe.hoon`: `print`, `prompt`, and `produce`.
410410
411−*`print`* is used for printing a `tank` to the console.
411+**`print`** is used for printing a `tank` to the console.
412412
413413In our example, `%+` is the rune to call a gate, and our gate `print` takes one
414414argument which is a `tank` to print. The `+` here is syntactic sugar for
415415`[leaf "What is your favorite color?"]` that just makes it easier to write.
416416
417−*`prompt`* is used to construct a prompt for the user to provide input.
417+**`prompt`** is used to construct a prompt for the user to provide input.
418418It takes a single argument that is a tuple. Most `%ask` generators will want to
419419use the `prompt` gate.
420420
@@ -430,7 +430,7 @@ implemented.
430430The third element of the `prompt` sample is the `tape` that we would like to
431431use to prompt the user. In the case of our example, we use `"color: "`.
432432
433−*`produce`* is used to construct the output of the generator. In our example,
433+**`produce`** is used to construct the output of the generator. In our example,
434434we produce a `tang`.
435435
436436
using/messaging.md+2−2
@@ -218,7 +218,7 @@ will print as
218218
219219### Activating Lines
220220
221−A line number identifying the *subsequent* line is displayed every 5
221+A line number identifying the **subsequent** line is displayed every 5
222222lines.
223223
224224```
@@ -233,7 +233,7 @@ lines.
233233~your-urbit=^ That's my message!
234234```
235235
236−You can use a line number to *activate* a line:
236+You can use a line number to **activate** a line:
237237
238238```
239239~your-urbit:talk= ;5
using/sail.md+1−1
@@ -55,7 +55,7 @@ is put through a tree of renderers specified at `/ren/urb/tree.hoon`
5555-- _except_ for files inside of `/web/pages`. All of the files in `/web` and
5656its non-`/pages` children directories have various operations on files, such as
5757wrapping your Sail the `html`, `head`, and `body` nodes. This rendering tool,
58−called simply *Tree*, also adds certain formatting polish, such as a sidebar
58+called simply **Tree**, also adds certain formatting polish, such as a sidebar
5959that lists sibling files in the same directory.
6060
6161The `/web/pages` sub-directory is a unique case with its own rendering rules.
using/shell.md+8−8
@@ -214,9 +214,9 @@ number of vane names.
214214
215215### Sources and sinks
216216
217−A Dojo command is either a *source* or a *sink*. A source is just something
217+A Dojo command is either a **source** or a **sink**. A source is just something
218218that can be printed to your console or the result of some computation. A
219−sink is an *effect*: a change to the filesystem, a network message, a
219+sink is an **effect**: a change to the filesystem, a network message, a
220220change to your environment, or typed message to an app.
221221
222222Sources can be chained together, but we can only produce one effect per
@@ -346,7 +346,7 @@ a few reserved names that have special uses.
346346
347347Current working `%clay` desk and revision. Read / write.
348348
349−*Examples:*
349+**Examples:**
350350
351351```
352352~your-urbit:dojo> =dir %/web
@@ -359,7 +359,7 @@ Current working `%clay` desk and revision. Read / write.
359359Current set of libraries (`/lib`) in your environment. Can be set
360360with `/+`. Read / write.
361361
362−*Examples:*
362+**Examples:**
363363
364364```
365365~your-urbit:dojo> /+ react
@@ -372,7 +372,7 @@ with `/+`. Read / write.
372372Current set of structures (`/sur`) in your environment. Can be set
373373with `/-`. Read / write.
374374
375−*Examples:*
375+**Examples:**
376376
377377```
378378~your-urbit:dojo> /- sole
@@ -384,7 +384,7 @@ with `/-`. Read / write.
384384
385385The current (128-bit `@da`) time. Read-only.
386386
387−*Example:*
387+**Example:**
388388
389389```
390390~your-urbit:dojo> now
@@ -396,7 +396,7 @@ The current (128-bit `@da`) time. Read-only.
396396
397397The current urbit ship. Read-only.
398398
399−*Example:*
399+**Example:**
400400
401401```
402402~your-urbit:dojo> our
@@ -408,7 +408,7 @@ The current urbit ship. Read-only.
408408
409409512 bits of entropy. Read-only.
410410
411−*Example:*
411+**Example:**
412412
413413```
414414~your-urbit:dojo> eny
using/udon.md+23−25
@@ -123,7 +123,7 @@ displayed. The number of leading `#`s corresponds to the resulting HTML
123123header-size element: `#` yields an `<h1>`, `##` yields an `<h2>`, and so on,
124124through `<h6>`. The header for this section is `### Headers`.
125125
126−*Example:*
126+**Example:**
127127```
128128#### Header (h4)
129129
@@ -144,7 +144,7 @@ Enclosing text with `*` will cause that text to appear bolded, using a `<b>`
144144element.
145145
146146
147−*Example:*
147+**Example:**
148148
149149```
150150To get their *attention*, you need that _je ne sais quoi_.
@@ -152,7 +152,7 @@ To get their *attention*, you need that _je ne sais quoi_.
152152
153153###### Produces:
154154
155−To get their *attention*, you need that _je ne sais quoi_.
155+To get their **attention**, you need that _je ne sais quoi_.
156156
157157### Line Break
158158
@@ -160,7 +160,7 @@ A blank line is interpreted as a line break, creating a distinct
160160paragraph. However, a newline on its own is merely interpreted as a space on
161161the _same line_.
162162
163−*Example:*
163+**Example:**
164164
165165```
166166Here's the first line.
@@ -186,7 +186,7 @@ A backslash at the end of a line inserts a line break (`<br>`)
186186after that line. This contrasts with the normal udon behavior of
187187converting newlines to spaces.
188188
189−*Example:*
189+**Example:**
190190```
191191I wonder how long each line
192192will be if I put backslashes\
@@ -203,7 +203,7 @@ at the ends of the lines.
203203A backslash directly _before_ a word (with no spaces) will be interpreted
204204as an escape character, causing it to be rendered raw.
205205
206−*Example:*
206+**Example:**
207207
208208```
209209Here is some *bold* text.
@@ -212,18 +212,18 @@ Here is some \*not bold* text.
212212
213213###### Produces:
214214
215−Here is some *bold* text.
215+Here is some **bold** text.
216216Here is some \*not bold* text.
217217
218218
219219### List
220220
221221A line beginning with a `-` followed by a space is interpreted as an
222−element of an *unordered list* (`<ul>`). Each line in an unordered list is
222+element of an **unordered list** (`<ul>`). Each line in an unordered list is
223223prepended with a bullet point.
224224
225225A line beginning with a `+` followed by a space is interpreted as an element
226−of an *ordered list* (`<ol>`). Each line in an ordered list is prepended with
226+of an **ordered list** (`<ol>`). Each line in an ordered list is prepended with
227227a number corresponding to its position in that list.
228228
229229New list elements are delineated by newlines beginning with list symbols of
@@ -244,7 +244,7 @@ Between to list elements, however, a blank line is semantically equivalent to
244244a bare newline. To separate two lists with blank space, create a blank line
245245followed by a `\\` on its own line.
246246
247−*Example:*
247+**Example:**
248248
249249```
250250- Eggs
@@ -312,7 +312,7 @@ in `[]` followed by the destination in `()`.
312312The first type is an inline-style link, which simply uses the full URL as its
313313destination.
314314
315−*Example:*
315+**Example:**
316316
317317```
318318[I'm an inline-style link](https://www.urbit.org/docs/reference/shell)
@@ -326,7 +326,7 @@ The second type is a reference-style link, which uses a relative path, based on
326326the current page's location. Instead of the full url, we use `..` to fill in
327327the all of the URL that the destination has in common with the origin page.
328328
329−*Example:*
329+**Example:**
330330
331331```
332332[I'm a reference-style link](../shell)
@@ -376,7 +376,7 @@ It was the best of times, it was the worst of times...
376376Text enclosed in double quotes (`"`) will be rendered with
377377opening and closing quotes -- that is, `“` and `”`.
378378
379−*Example:*
379+**Example:**
380380```
381381"Yes," he said. "That is the way with him."
382382```
@@ -413,7 +413,7 @@ Using `` ` \`` is useful when you want to designated only part of a line as code
413413Since this page is written in Udon, we've been using this operation
414414throughout this guide to `format text` to distinguish code from prose.
415415
416−*Example:*
416+**Example:**
417417```
418418`*[a 2 b c] -> *[*[a b] *[a c]]` is like lisp's `apply`.
419419```
@@ -425,7 +425,7 @@ Also, using the `++` prefix before a word will cause the word to be rendered as
425425code with the `++` displayed, since that's the standard notation for an arm in
426426Hoon.
427427
428−*Example:*
428+**Example:**
429429
430430```
431431The ++add arm is used to sum two numbers.
@@ -442,7 +442,7 @@ before and after the contained text, the text will be treated as a code block.
442442
443443Most of our examples so far have used.
444444
445−*Example:*
445+**Example:**
446446
447447
448448```
@@ -524,7 +524,7 @@ Inline italicization with `_` does not work, however.
524524Blank newlines do not end the block quote, but a blank newline followed by an
525525unindented line of text _will_ end the quote.
526526
527−*Example:*
527+**Example:**
528528
529529```
530530> As Gregor Samsa awoke one morning from uneasy dreams, he
@@ -540,7 +540,7 @@ Quote break.
540540###### Produces:
541541
542542> As Gregor Samsa awoke one morning from uneasy dreams
543− he found himself transformed in his bed into a *monstrous* vermin.
543+ he found himself transformed in his bed into a **monstrous** vermin.
544544
545545Quote break.
546546
@@ -554,7 +554,7 @@ Quote break.
554554A poem is a section of text with meaningful newlines. Recall that,
555555normally in Udon, newlines are treated as spaces and do not create a
556556new line of text. If you want to embed text where newlines are retained, then
557−indent the text in question with *eight spaces*.
557+indent the text in question with **eight spaces**.
558558
559559###### Example:
560560
@@ -600,13 +600,11 @@ Example:
600600Produces:
601601
602602
603−;=
604− ;p
605− ;strong: Don't panic!
603+<p>
604+ <strong>Don't panic!</strong>
606605 <br>
607− ;small: [reactive publishing intensifies]
608− ==
609−==
606+ <small>[reactive publishing intensifies]</small>
607+</p>
610608
611609
612610## A Simple Udon Blog