on master help sign in
fix unconverted udon headers
f1229c1Morgan Sutherland
introduction/installing-urbit.md+1−5
@@ -197,11 +197,7 @@ One you've completed your installation, you can continue on to the instructions
197Or, if you want to try testing and writing code, check out the guide to [getting an unnetworked development ship](../creating-a-development-ship).
197Or, if you want to try testing and writing code, check out the guide to [getting an unnetworked development ship](../creating-a-development-ship).
198
198
199
199
200−;=
201− ;h2
202− ;div(id "swap"): Set Up Swap
200+## Set Up Swap
203− ==
204−==
205
201
206If you're running Urbit in the cloud on a small instance, you may need to additionally configure swap space. If you're not, you can safely ignore this section.
202If you're running Urbit in the cloud on a small instance, you may need to additionally configure swap space. If you're not, you can safely ignore this section.
207
203
learn/arvo/ames.md+1−5
@@ -22,11 +22,7 @@ routing is handled entirely in `%ames`. Finally, the actual `%ames`
22protocol itself, including how to route incoming packets to the correct
22protocol itself, including how to route incoming packets to the correct
23vane or app, is defined in `%ames`.
23vane or app, is defined in `%ames`.
24
24
25−;=
26− ;h2
27− ;div(id "commentary"): Commentary
25+## Commentary
28− ==
29−==
30
26
31`%ames` is our networking protocol.
27`%ames` is our networking protocol.
32
28
learn/arvo/clay.md+2−10
@@ -20,11 +20,7 @@ zuse. Second is the write, query, and subscription logic. Finally, there
20is the logic for communicating requests to, and receiving requests from,
20is the logic for communicating requests to, and receiving requests from,
21foreign ships.
21foreign ships.
22
22
23−;=
24− ;h2
25− ;div(id "architecture"): Architecture
23+## Architecture
26− ==
27−==
28
24
29Clay is the primary filesystem for the arvo operating system,
25Clay is the primary filesystem for the arvo operating system,
30which is the core of an urbit. The architecture of clay is
26which is the core of an urbit. The architecture of clay is
@@ -440,11 +436,7 @@ the other desk, or both desks do not exist. The sync will be
440activated when the upstream desk comes into existence and will
436activated when the upstream desk comes into existence and will
441create the downstream desk if needed.
437create the downstream desk if needed.
442
438
443−;=
444− ;h2
445− ;div(id "commentary"): Commentary
439+## Commentary
446− ==
447−==
448
440
449The first part of this section will be reference documentation for the data
441The first part of this section will be reference documentation for the data
450types used by our filesystem. In fact, as a general guide, we recommend
442types used by our filesystem. In fact, as a general guide, we recommend
learn/arvo/eyre.md+3−15
@@ -16,11 +16,7 @@ essentially stateless, like functional publishing with `%ford`.
16Additionally, there's a fairly significant component that handles
16Additionally, there's a fairly significant component that handles
17`%gall` messaging and subscriptions, which must be stateful.
17`%gall` messaging and subscriptions, which must be stateful.
18
18
19−;=
20− ;h2
21− ;div(id "reference"): Reference
19+## Reference
22− ==
23−==
24
20
25### State
21### State
26
22
@@ -45,11 +41,7 @@ Runtime
45- `++ya`
41- `++ya`
46- `++ix`
42- `++ix`
47
43
48−;=
49− ;h2
50− ;div(id "commentary"): Commentary
44+## Commentary
51− ==
52−==
53
45
54
46
55Let us follow the loading of a simple cli app, as it bounces from
47Let us follow the loading of a simple cli app, as it bounces from
@@ -293,11 +285,7 @@ infrastructure crumbles around you, only imported martian networking can be
293trusted: the `%get` and `%got` [gram]()s are used to proxy [`%this` requests]() and
285trusted: the `%get` and `%got` [gram]()s are used to proxy [`%this` requests]() and
294[`%thou` responses]() respectively.
286[`%thou` responses]() respectively.
295
287
296−;=
297− ;h2
298− ;div(id "specification"): Specification
288+## Specification
299− ==
300−==
301
289
302The `%eyre` vane serves one purpose: receiving inbound HTTP requests from browsers and clients pretending to be browsers. To facilitate this communication, `%eyre` does two things: 1. provide an API for traditional clients to talk to; and 2. provide a mechanism for saving state that allows the server to keep track of identities/sessions, subscription data, and active connections.
290The `%eyre` vane serves one purpose: receiving inbound HTTP requests from browsers and clients pretending to be browsers. To facilitate this communication, `%eyre` does two things: 1. provide an API for traditional clients to talk to; and 2. provide a mechanism for saving state that allows the server to keep track of identities/sessions, subscription data, and active connections.
303
291
learn/arvo/ford.md+1−5
@@ -104,11 +104,7 @@ Slaps a hoon against a subject silk. The mark of the result is `%noun`.
104Validates untyped data from a ship against a given mark. This is an
104Validates untyped data from a ship against a given mark. This is an
105extremely useful function.
105extremely useful function.
106
106
107−;=
108− ;h2
109− ;div(id "runes"): Ford runes
107+## Ford runes
110− ==
111−==
112
108
113One of the most common ways to use ford is through ford's runes, all of which begin with `/` ("net"). A ford rune runs a step of a ford build and places the result in the subject. There are various kinds of build steps, some of which take other build steps as parameters. The most common pattern is to have a sequence of ford runes at the top of a hoon source file that import the results of evaluating other hoon files. This is how we "import a library" in urbit: we add the result of compiling another hoon file into the current subject, possibly renaming it by wrapping a face around it.
109One of the most common ways to use ford is through ford's runes, all of which begin with `/` ("net"). A ford rune runs a step of a ford build and places the result in the subject. There are various kinds of build steps, some of which take other build steps as parameters. The most common pattern is to have a sequence of ford runes at the top of a hoon source file that import the results of evaluating other hoon files. This is how we "import a library" in urbit: we add the result of compiling another hoon file into the current subject, possibly renaming it by wrapping a face around it.
114
110
learn/arvo/gall.md+9−45
@@ -10,11 +10,7 @@ This is documentation about how to write Gall apps. Some knowledge of Hoon is a
10 always accessible enough to beginners. We are planning to rewrite these in the
10 always accessible enough to beginners. We are planning to rewrite these in the
11 near future. There is still useful information to be found in the meantime.
11 near future. There is still useful information to be found in the meantime.
12
12
13−;=
14− ;h2
15− ;div(id "api"): API Connectors
13+## API Connectors
16− ==
17−==
18
14
19> Note: This lesson depends on some code that needs to be updated before the examples will work correctly. This will be addressed in the near future. We apologize!
15> Note: This lesson depends on some code that needs to be updated before the examples will work correctly. This will be addressed in the near future. We apologize!
20
16
@@ -517,11 +513,7 @@ this doc:
517--
513--
518```
514```
519
515
520−;=
521− ;h2
522− ;div(id "generators"): Generators
516+## Generators
523− ==
524−==
525
517
526Up until now we've poked apps directly. This requires the user to
518Up until now we've poked apps directly. This requires the user to
527specify the mark, and it requires the app to accept the arguments in a
519specify the mark, and it requires the app to accept the arguments in a
@@ -685,11 +677,7 @@ Which causes `~sampel-sipnym` to print `[%receiving 'howdy']` and
685- Create a generator for `:click` from [Web Apps](#backend) so that you can run `:click|poke` to poke it.
677- Create a generator for `:click` from [Web Apps](#backend) so that you can run `:click|poke` to poke it.
686
678
687
679
688−;=
689− ;h2
690− ;div(id "http"): Writing an HTTP Request
680+## Writing an HTTP Request
691− ==
692−==
693
681
694There's a variety of arvo services we haven't touched on yet.
682There's a variety of arvo services we haven't touched on yet.
695Let's figure out how to make HTTP requests and set timers.
683Let's figure out how to make HTTP requests and set timers.
@@ -897,11 +885,7 @@ Let's try it out:
897~fintud-macrep:dojo> :up &atom 'off'
885~fintud-macrep:dojo> :up &atom 'off'
898```
886```
899
887
900−;=
901− ;h2
902− ;div(id "marks"): Marks
888+## Marks
903− ==
904−==
905
889
906We've used predefined marks already, but we haven't yet created
890We've used predefined marks already, but we haven't yet created
907our own marks. Let's write a sample mark of our own, then chain
891our own marks. Let's write a sample mark of our own, then chain
@@ -1022,11 +1006,7 @@ mark.
1022
1006
1023The minimal correct input, then, is `&mime &hymn &cord &atom 17`.
1007The minimal correct input, then, is `&mime &hymn &cord &atom 17`.
1024
1008
1025−;=
1026− ;h2
1027− ;div(id "network"): Network Messages
1009+## Network Messages
1028− ==
1029−==
1030
1010
1031In the following we assume that you have some knowledge of Hoon. If you don't, check out chapters 1 and 2 of the Hoon tutorial and check back when you're ready.
1011In the following we assume that you have some knowledge of Hoon. If you don't, check out chapters 1 and 2 of the Hoon tutorial and check back when you're ready.
1032
1012
@@ -1373,11 +1353,7 @@ urbit as for sending messages between apps on different urbits.
1373- Put `even` and `odd` on two separate urbits and pass the messages over the network. Post a link to a working solution in :talk to receive a cookie.
1353- Put `even` and `odd` on two separate urbits and pass the messages over the network. Post a link to a working solution in :talk to receive a cookie.
1374
1354
1375
1355
1376−;=
1377− ;h2
1378− ;div(id "security"): Security Drivers
1356+## Security Drivers
1379− ==
1380−==
1381
1357
1382A security driver is a file in `/=home=/sec/<tld>/<domain>/hoon`
1358A security driver is a file in `/=home=/sec/<tld>/<domain>/hoon`
1383that handles the authentication for all HTTP requests to
1359that handles the authentication for all HTTP requests to
@@ -1651,11 +1627,7 @@ library.
1651Remember, of course, that the best strategy for building security
1627Remember, of course, that the best strategy for building security
1652drivers is to copy a similar one and tweak it to taste.
1628drivers is to copy a similar one and tweak it to taste.
1653
1629
1654−;=
1655− ;h2
1656− ;div(id "state"): State
1630+## State
1657− ==
1658−==
1659
1631
1660In the last section we built a few small apps that sent moves. These apps were
1632In the last section we built a few small apps that sent moves. These apps were
1661entirely stateless, however. Most useful apps require some amount of state.
1633entirely stateless, however. Most useful apps require some amount of state.
@@ -1772,11 +1744,7 @@ Sample output:
1772```
1744```
1773
1745
1774
1746
1775−;=
1776− ;h2
1777− ;div(id "subscriptions"): Subscriptions
1747+## Subscriptions
1778− ==
1779−==
1780
1748
1781We've dealt fairly extensively with "poke" messages to an app, but these
1749We've dealt fairly extensively with "poke" messages to an app, but these
1782are somewhat limited. A poke is a one-way message, but more often we
1750are somewhat limited. A poke is a one-way message, but more often we
@@ -2102,11 +2070,7 @@ nullability. If `err` is `~`, then the subscription was successful and we tell
2102that to the user. Otherwise, we print out the error message.
2070that to the user. Otherwise, we print out the error message.
2103
2071
2104
2072
2105−;=
2106− ;h2
2107− ;div(id "backend"): Backend
2073+## Backend
2108− ==
2109−==
2110
2074
2111We've done purely functional web pages as hook files, and we've
2075We've done purely functional web pages as hook files, and we've
2112done command line apps, so now let's interact with an app over
2076done command line apps, so now let's interact with an app over
learn/arvo/hall.md+5−25
@@ -17,11 +17,7 @@ Hall is the Urbit messaging and notifications protocol. This document details Ha
17
17
18- #### [The New Gall Model](#new-gall)
18- #### [The New Gall Model](#new-gall)
19
19
20−;=
21− ;h1
22− ;div(id "architecture"): Hall Architecture
20+# Hall Architecture
23− ==
24−==
25
21
26This document is complemented by Hall's source code, but doesn't require it. Definitions of data structures, code snippets and diagrams will be provided where useful.
22This document is complemented by Hall's source code, but doesn't require it. Definitions of data structures, code snippets and diagrams will be provided where useful.
27
23
@@ -512,11 +508,7 @@ To gain a more thorough understanding of Hall's inner workings, take a look at i
512To see an expansive example of a Hall client, take a look at the code of Talk. It, too, comes with inline documentation.
508To see an expansive example of a Hall client, take a look at the code of Talk. It, too, comes with inline documentation.
513[On Github.](https://github.com/urbit/arvo/blob/master/app/talk.hoon)
509[On Github.](https://github.com/urbit/arvo/blob/master/app/talk.hoon)
514
510
515−;=
516− ;h1
517− ;div(id "interface"): The Hall Interface
511+# The Hall Interface
518− ==
519−==
520
512
521This document describes the different interfaces Hall provides and the data that is accessible and modifiable through them. Knowledge of the Urbit application model (including [new gall](#new-gall)) and [Hall's architecture](#architecture) is assumed.
513This document describes the different interfaces Hall provides and the data that is accessible and modifiable through them. Knowledge of the Urbit application model (including [new gall](#new-gall)) and [Hall's architecture](#architecture) is assumed.
522
514
@@ -878,11 +870,7 @@ When the user makes any changes to shared UI elements (elements that should pers
878
870
879`%public`: Adds or removes a circle to/from the user's public membership list.
871`%public`: Adds or removes a circle to/from the user's public membership list.
880
872
881−;=
882− ;h1
883− ;div(id "new-gall"): The New Gall Model
873+# The New Gall Model
884− ==
885−==
886
874
887This document is complemented by the source code of applications that use the new Gall model (like [Hall](https://github.com/urbit/arvo/blob/master/app/hall.hoon)), but doesn't require it. Code snippets will be provided where useful. Some knowledge of Hoon and the functioning of Hoon apps is assumed.
875This document is complemented by the source code of applications that use the new Gall model (like [Hall](https://github.com/urbit/arvo/blob/master/app/hall.hoon)), but doesn't require it. Code snippets will be provided where useful. Some knowledge of Hoon and the functioning of Hoon apps is assumed.
888
876
@@ -1106,11 +1094,7 @@ As we saw earlier, for `/number` queries the `delta`s match one-on-one with the
1106- Gall should probably cache `++feel` results during a single pass, to avoid the cycles of generating what it can be certain of is the same `(unit rumor)`. (But then for eg `/circle/nom/13` and `/circle/nom/14` it would still recalculate. Better than nothing.)
1094- Gall should probably cache `++feel` results during a single pass, to avoid the cycles of generating what it can be certain of is the same `(unit rumor)`. (But then for eg `/circle/nom/13` and `/circle/nom/14` it would still recalculate. Better than nothing.)
1107
1095
1108
1096
1109−;=
1110− ;h2
1111− ;div(id "spec"): The original new-Gall spec
1097+## The original new-Gall spec
1112− ==
1113−==
1114
1098
1115`~sorreg-namtyv`
1099`~sorreg-namtyv`
1116
1100
@@ -1266,11 +1250,7 @@ As we saw earlier, for `/number` queries the `delta`s match one-on-one with the
1266--
1250--
1267```
1251```
1268
1252
1269−;=
1270− ;h2
1271− ;div(id "example"): A new-Gall example app
1253+## A new-Gall example app
1272− ==
1273−==
1274
1254
1275```
1255```
1276:: counter app
1256:: counter app
learn/nock/implementations.md+11−55
@@ -29,11 +29,7 @@ We use a C implementation for our Nock interpreter. But building a Nock interpre
29
29
30- #### [Swift](#swift)
30- #### [Swift](#swift)
31
31
32−;=
33− ;h2
34− ;div(id "C"): C Implementation
32+## C Implementation
35− ==
36−==
37
33
38The actual production Nock interpreter. Note gotos for tail-call elimination,
34The actual production Nock interpreter. Note gotos for tail-call elimination,
39and manual reference counting. More about the C environment can be found
35and manual reference counting. More about the C environment can be found
@@ -282,11 +278,7 @@ _n_nock_on(u3_noun bus, u3_noun fol)
282}
278}
283```
279```
284
280
285−;=
286− ;h2
287− ;div(id "clojure"): Clojure
281+## Clojure
288− ==
289−==
290
282
291From [Matt Earnshaw](https://github.com/mattearnshaw/anock/blob/master/src/anock/core.clj):
283From [Matt Earnshaw](https://github.com/mattearnshaw/anock/blob/master/src/anock/core.clj):
292
284
@@ -405,11 +397,7 @@ From [Matt Earnshaw](https://github.com/mattearnshaw/anock/blob/master/src/anock
405 (apply* bracket nouns)))
397 (apply* bracket nouns)))
406```
398```
407
399
408−;=
400+## C#
409− ;h2
410− ;div(id "c-sharp"): C#
411− ==
412−==
413
401
414
402
415From [Julien Beasley](https://github.com/zass30/Nock5KCSharp):
403From [Julien Beasley](https://github.com/zass30/Nock5KCSharp):
@@ -882,11 +870,7 @@ namespace NockInterpreter
882}
870}
883```
871```
884
872
885−;=
886− ;h2
887− ;div(id "groovy"): Groovy
873+## Groovy
888− ==
889−==
890
874
891From [Kohányi Róbert](https://github.com/kohanyirobert/gnock/blob/master/gnock.groovy):
875From [Kohányi Róbert](https://github.com/kohanyirobert/gnock/blob/master/gnock.groovy):
892
876
@@ -1086,11 +1070,7 @@ def tar(def a, def r) {
1086}
1070}
1087```
1071```
1088
1072
1089−;=
1090− ;h2
1091− ;div(id "haskell"): Haskell
1073+## Haskell
1092− ==
1093−==
1094
1074
1095From [Steve Dee](https://github.com/mrdomino/hsnock/blob/master/Language/Nock5K/Spec.hs):
1075From [Steve Dee](https://github.com/mrdomino/hsnock/blob/master/Language/Nock5K/Spec.hs):
1096
1076
@@ -1196,11 +1176,7 @@ tar a = Left "*a"
1196==
1176==
1197```
1177```
1198
1178
1199−;=
1200− ;h2
1201− ;div(id "javascript"): JavaScript
1179+## JavaScript
1202− ==
1203−==
1204
1180
1205From [Joe Bryan](https://github.com/joemfb/nock.js/blob/master/nock.js):
1181From [Joe Bryan](https://github.com/joemfb/nock.js/blob/master/nock.js):
1206
1182
@@ -1559,11 +1535,7 @@ From [Joe Bryan](https://github.com/joemfb/nock.js/blob/master/nock.js):
1559}))
1535}))
1560```
1536```
1561
1537
1562−;=
1563− ;h2
1564− ;div(id "python"): Python
1538+## Python
1565− ==
1566−==
1567
1539
1568From [James Tauber](https://github.com/jtauber/pynock/blob/master/nock.py):
1540From [James Tauber](https://github.com/jtauber/pynock/blob/master/nock.py):
1569
1541
@@ -1652,11 +1624,7 @@ def tar(noun):
1652 return (nock((noun[0], noun[1][0])), nock((noun[0], noun[1][1])))
1624 return (nock((noun[0], noun[1][0])), nock((noun[0], noun[1][1])))
1653```
1625```
1654
1626
1655−;=
1656− ;h2
1657− ;div(id "ruby"): Ruby
1627+## Ruby
1658− ==
1659−==
1660
1628
1661From [T.J. Corcoran](https://github.com/TJamesCorcoran/nock/blob/master/nock.rb):
1629From [T.J. Corcoran](https://github.com/TJamesCorcoran/nock/blob/master/nock.rb):
1662
1630
@@ -1789,11 +1757,7 @@ def nock(arr)
1789end
1757end
1790```
1758```
1791
1759
1792−;=
1793− ;h2
1794− ;div(id "scala"): Scala
1760+## Scala
1795− ==
1796−==
1797
1761
1798From [Steve Randy Waldman](https://github.com/swaldman/nnnock/blob/master/src/main/scala/com/mchange/sc/v1/nnnock/package.scala):
1762From [Steve Randy Waldman](https://github.com/swaldman/nnnock/blob/master/src/main/scala/com/mchange/sc/v1/nnnock/package.scala):
1799
1763
@@ -1875,11 +1839,7 @@ package object nnnock {
1875 }
1839 }
1876```
1840```
1877
1841
1878−;=
1879− ;h2
1880− ;div(id "scheme"): Scheme
1842+## Scheme
1881− ==
1882−==
1883
1843
1884From [Kohányi Róbert](https://github.com/kohanyirobert/snock/blob/master/snock.ss):
1844From [Kohányi Róbert](https://github.com/kohanyirobert/snock/blob/master/snock.ss):
1885
1845
@@ -2001,11 +1961,7 @@ From [Kohányi Róbert](https://github.com/kohanyirobert/snock/blob/master/snock
2001 (else (raise 13)))))))))))))
1961 (else (raise 13)))))))))))))
2002```
1962```
2003
1963
2004−;=
2005− ;h2
2006− ;div(id "swift"): Swift
1964+## Swift
2007− ==
2008−==
2009
1965
2010```
1966```
2011import Foundation
1967import Foundation
reference/glossary.md+1−5
@@ -474,11 +474,7 @@ _More information can be found in the [hoon](/docs/learn/arvo/hoon) section._
474 expression source (a [hoon](#a-hoon), for example) and produces the product
474 expression source (a [hoon](#a-hoon), for example) and produces the product
475 type and nock formula. So [type hoon] is mapped to [type nock].
475 type and nock formula. So [type hoon] is mapped to [type nock].
476
476
477−;=
478− ;h3
479− ;div(id "a-hoon"): hoon
477+### hoon
480− ==
481−==
482
478
483A _hoon_ (lowercase) is the result of parsing a Hoon source expression into an
479A _hoon_ (lowercase) is the result of parsing a Hoon source expression into an
484AST node. These AST nodes are nouns, like all other Hoon data. Because every
480AST node. These AST nodes are nouns, like all other Hoon data. Because every
reference/hoon-expressions/rune/bar.md+11−55
@@ -13,11 +13,7 @@ with changes, which useful for recursion among other things:
13
13
14## Runes
14## Runes
15
15
16−;=
17− ;h3
18− ;div(id "barcab"): |_ "barcab"
16+### |_ "barcab"
19− ==
20−==
21
17
22Produce a *door* (a core with a sample).
18Produce a *door* (a core with a sample).
23
19
@@ -107,11 +103,7 @@ The `ne` door prints a digit in base 10, 16, 32 or 64:
107'c'
103'c'
108```
104```
109
105
110−;=
111− ;h3
112− ;div(id "barcen"): |% "barcen"
106+### |% "barcen"
113− ==
114−==
115
107
116Produce a core, `[battery payload]`.
108Produce a core, `[battery payload]`.
117
109
@@ -171,11 +163,7 @@ A trivial core:
171101
163101
172```
164```
173
165
174−;=
175− ;h3
176− ;div(id "barcol"): |: "barcol"
166+### "barcol"
177− ==
178−==
179
167
180Produce a gate with a custom sample.
168Produce a gate with a custom sample.
181
169
@@ -223,11 +211,7 @@ This is useful if you want a gate to have a sample of a particular type, but you
22312
21112
224```
212```
225
213
226−;=
227− ;h3
228− ;div(id "bardot"): |. "bardot"
214+### |. "bardot"
229− ==
230−==
231
215
232Produce a trap (a core with one arm `$`).
216Produce a trap (a core with one arm `$`).
233
217
@@ -295,11 +279,7 @@ trap, since it's a core with an `$` arm.
295
279
296> `$(...)` expands to `%=($ ...)` (["centis"](/docs/reference/hoon-expressions/rune/cen#centis)).
280> `$(...)` expands to `%=($ ...)` (["centis"](/docs/reference/hoon-expressions/rune/cen#centis)).
297
281
298−;=
299− ;h3
300− ;div(id "barhep"): |- "barhep"
282+### |- "barhep"
301− ==
302−==
303
283
304Produce a trap (a core with one arm `$`) and evaluate it.
284Produce a trap (a core with one arm `$`) and evaluate it.
305
285
@@ -355,11 +335,7 @@ The classic loop is a decrement:
35541
33541
356```
336```
357
337
358−;=
359− ;h3
360− ;div(id "barket"): |^ "barket"
338+### |^ "barket"
361− ==
362−==
363
339
364Produce a core whose battery includes a `$` arm and compute the latter.
340Produce a core whose battery includes a `$` arm and compute the latter.
365
341
@@ -418,11 +394,7 @@ A trivial example:
418100
394100
419```
395```
420
396
421−;=
422− ;h3
423− ;div(id "barsig"): |~ "barsig"
397+### |~ "barsig"
424− ==
425−==
426
398
427Produce an iron gate.
399Produce an iron gate.
428
400
@@ -461,11 +433,7 @@ See [this discussion of core variance models](/docs/reference/hoon-expressions/a
461<1|usl {a/@ $~}>
433<1|usl {a/@ $~}>
462```
434```
463
435
464−;=
465− ;h3
466− ;div(id "bartar"): |* "bartar"
436+### |* "bartar"
467− ==
468−==
469
437
470Produce a wet gate (one-armed core with sample).
438Produce a wet gate (one-armed core with sample).
471
439
@@ -531,11 +499,7 @@ Wet and dry gates in a nutshell:
531The dry gate does not preserve the type of `a` and `b`; the wet
499The dry gate does not preserve the type of `a` and `b`; the wet
532gate does.
500gate does.
533
501
534−;=
535− ;h3
536− ;div(id "bartis"): |= "bartis"
502+### |= "bartis"
537− ==
538−==
539
503
540Produce a gate (a one-armed core with a sample).
504Produce a gate (a one-armed core with a sample).
541
505
@@ -595,11 +559,7 @@ A slightly less trivial gate:
595430
559430
596```
560```
597
561
598−;=
599− ;h3
600− ;div(id "barvat"): |@ "barvat"
562+### |@ "barvat"
601− ==
602−==
603
563
604Produce a 'wet' core `[battery payload]`.
564Produce a 'wet' core `[battery payload]`.
605
565
@@ -632,11 +592,7 @@ A `|@` expression produces a 'wet' core whose payload is the expression's subjec
632
592
633The `|@` rune is just like the `|%` rune except that instead of producing a 'dry' core, it produces a 'wet' one. This allows for type polymorphism of its arms, using 'genericity'. See [Advanced types](/docs/reference/hoon-expressions/advanced).
593The `|@` rune is just like the `|%` rune except that instead of producing a 'dry' core, it produces a 'wet' one. This allows for type polymorphism of its arms, using 'genericity'. See [Advanced types](/docs/reference/hoon-expressions/advanced).
634
594
635−;=
636− ;h3
637− ;div(id "barwut"): |? "barwut"
595+### |? "barwut"
638− ==
639−==
640
596
641Produce a lead trap.
597Produce a lead trap.
642
598
reference/hoon-expressions/rune/buc.md+10−50
@@ -32,11 +32,7 @@ instance, `(map foo bar)` is a table from mold `foo` to mold
32`bar`. `map` is not a mold; it's a function that makes a mold.
32`bar`. `map` is not a mold; it's a function that makes a mold.
33Molds and mold builders are generally described together.
33Molds and mold builders are generally described together.
34
34
35−;=
36− ;h2
37− ;div(id "base"): Base Structures
35+## Base Structures
38− ==
39−==
40
36
41`[%base p=$@(?(%noun %cell %bean %null) [%atom p=aura])]`: trivial structures (types).
37`[%base p=$@(?(%noun %cell %bean %null) [%atom p=aura])]`: trivial structures (types).
42
38
@@ -55,11 +51,7 @@ Irregular: `*` makes `%noun`, `^` makes `%cell`, `?` makes
55
51
56## Runes
52## Runes
57
53
58−;=
59− ;h3
60− ;div(id "buccab"): $_ "buccab"
54+### $_ "buccab"
61− ==
62−==
63
55
64`[%bscb p=hoon]`: structure that normalizes to an example.
56`[%bscb p=hoon]`: structure that normalizes to an example.
65
57
@@ -95,11 +87,7 @@ and produces its *example* instead.
95[%foobaz %moobaz]
87[%foobaz %moobaz]
96```
88```
97
89
98−;=
99− ;h3
100− ;div(id "buccen"): $% "buccen"
90+### $% "buccen"
101− ==
102−==
103
91
104`[%bscn p=(list spec)]`: structure which recognizes a union tagged by head atom.
92`[%bscn p=(list spec)]`: structure which recognizes a union tagged by head atom.
105
93
@@ -130,11 +118,7 @@ be an infinite loop!
130[%foo p=0 q=0]~
118[%foo p=0 q=0]~
131```
119```
132
120
133−;=
134− ;h3
135− ;div(id "buccol"): $: "buccol"
121+### "buccol"
136− ==
137−==
138
122
139`[%bscl p=(list spec)]`: form a cell type.
123`[%bscl p=(list spec)]`: form a cell type.
140
124
@@ -168,11 +152,7 @@ Irregular (structure mode): `[a b c]` is `$:(a b c)`.
168[p=0 q=%$]
152[p=0 q=%$]
169```
153```
170
154
171−;=
172− ;h3
173− ;div(id "buchep"): $- "buchep"
155+### $- "buchep"
174− ==
175−==
176
156
177`[%bshp p=spec q=spec]`: structure that normalizes to an example gate.
157`[%bshp p=spec q=spec]`: structure that normalizes to an example gate.
178
158
@@ -200,11 +180,7 @@ Since a `$-` reduces to a [`$_`](#buccab), it is not useful for normalizing, jus
200%baz
180%baz
201```
181```
202
182
203−;=
204− ;h3
205− ;div(id "bucket"): $^ "bucket"
183+### $^ "bucket"
206− ==
207−==
208
184
209`[%bskt p=spec q=spec]`: structure which normalizes a union tagged by head depth (cell).
185`[%bskt p=spec q=spec]`: structure which normalizes a union tagged by head depth (cell).
210
186
@@ -238,11 +214,7 @@ Regular: *2-fixed*.
238[%baz p=0]
214[%baz p=0]
239```
215```
240
216
241−;=
242− ;h3
243− ;div(id "bucsig"): $~ "bucsig"
217+### $~ "bucsig"
244− ==
245−==
246
218
247`[%bssg p=hoon q=spec]`: define a custom type default value
219`[%bssg p=hoon q=spec]`: define a custom type default value
248
220
@@ -305,11 +277,7 @@ Using `$~`:
305%default-value
277%default-value
306```
278```
307
279
308−;=
309− ;h3
310− ;div(id "bucvat"): $@ "bucvat"
280+### $@ "bucvat"
311− ==
312−==
313
281
314`[%bsvt p=spec q=spec]`: structure which normalizes a union tagged by head depth (atom).
282`[%bsvt p=spec q=spec]`: structure which normalizes a union tagged by head depth (atom).
315
283
@@ -347,11 +315,7 @@ Example:
347```
315```
348
316
349
317
350−;=
351− ;h3
352− ;div(id "buctis"): $= "buctis"
318+### $= "buctis"
353− ==
354−==
355
319
356`[%bsts p=skin q=spec]`: structure which wraps a face around another structure.
320`[%bsts p=skin q=spec]`: structure which wraps a face around another structure.
357
321
@@ -386,11 +350,7 @@ p=%foo
386p=%foo
350p=%foo
387```
351```
388
352
389−;=
390− ;h3
391− ;div(id "bucwut"): $? "bucwut"
353+### $? "bucwut"
392− ==
393−==
394
354
395`[%bswt p=(list spec)]`: form a type from a union of other types.
355`[%bswt p=(list spec)]`: form a type from a union of other types.
396
356
reference/hoon-expressions/rune/cen.md+9−45
@@ -9,11 +9,7 @@ These runes reduce to the `%=` rune
9
9
10## Runes
10## Runes
11
11
12−;=
13− ;h3
14− ;div(id "cencab"): %_ "cencab"
12+### %_ "cencab"
15− ==
16−==
17
13
18Resolve a wing with changes, preserving type.
14Resolve a wing with changes, preserving type.
19
15
@@ -76,11 +72,7 @@ See [how wings are resolved](/docs/reference/hoon-expressions/limb/wing).
76! nest-fail
72! nest-fail
77```
73```
78
74
79−;=
80− ;h3
81− ;div(id "cencol"): %: "cencol"
75+### "cencol"
82− ==
83−==
84
76
85Call a gate with many arguments.
77Call a gate with many arguments.
86
78
@@ -134,11 +126,7 @@ When `%:` is used in tall-form syntax, the series of expressions after `p` must
13499
12699
135```
127```
136
128
137−;=
138− ;h3
139− ;div(id "cendot"): %. "cendot"
129+### %. "cendot"
140− ==
141−==
142
130
143Call a gate (function), inverted.
131Call a gate (function), inverted.
144
132
@@ -179,11 +167,7 @@ The `%.` rune is for evaluating the `$` arm of a gate, i.e., calling a function.
1796
1676
180```
168```
181
169
182−;=
183− ;h3
184− ;div(id "cenhep"): %- "cenhep"
170+### %- "cenhep"
185− ==
186−==
187
171
188Call a gate (function).
172Call a gate (function).
189
173
@@ -232,11 +216,7 @@ This rune is for evaluating the `$` arm of a gate, i.e., calling a gate as a fun
2326
2166
233```
217```
234
218
235−;=
236− ;h3
237− ;div(id "cenket"): %^ "cenket"
219+### %^ "cenket"
238− ==
239−==
240
220
241Call gate with triple sample.
221Call gate with triple sample.
242
222
@@ -270,11 +250,7 @@ AST:
2706
2506
271```
251```
272
252
273−;=
274− ;h3
275− ;div(id "cenlus"): %+ "cenlus"
253+### %+ "cenlus"
276− ==
277−==
278
254
279Call gate with a cell sample.
255Call gate with a cell sample.
280
256
@@ -311,11 +287,7 @@ A `%+` expression is for calling a gate with a cell sample. `a` is the gate to
3116
2876
312```
288```
313
289
314−;=
315− ;h3
316− ;div(id "censig"): %~ "censig"
290+### %~ "censig"
317− ==
318−==
319
291
320Evaluate an arm in a door.
292Evaluate an arm in a door.
321
293
@@ -367,11 +339,7 @@ See also [`|_`](/docs/reference/hoon-expressions/rune/bar#barcab).
36720
33920
368```
340```
369
341
370−;=
371− ;h3
372− ;div(id "centar"): %* "centar"
342+### %* "centar"
373− ==
374−==
375
343
376Evaluate an expression, then resolve a wing with changes.
344Evaluate an expression, then resolve a wing with changes.
377
345
@@ -434,11 +402,7 @@ A `%*` expression evaluates some arbitrary Hoon expression, `b`, and then resolv
434[a=1 b=7 c=10]
402[a=1 b=7 c=10]
435```
403```
436
404
437−;=
438− ;h3
439− ;div(id "centis"): %= "centis"
405+### %= "centis"
440− ==
441−==
442
406
443Resolve a wing with changes.
407Resolve a wing with changes.
444
408
reference/hoon-expressions/rune/col.md+7−35
@@ -7,11 +7,7 @@ The `:` ("col") expressions are used to produce cells, which are pairs of values
7
7
8## Runes
8## Runes
9
9
10−;=
11− ;h3
12− ;div(id "colcab"): :_ "colcab"
10+### :_ "colcab"
13− ==
14−==
15
11
16`[%clcb p=hoon q=hoon]`; construct a cell, inverted.
12`[%clcb p=hoon q=hoon]`; construct a cell, inverted.
17
13
@@ -32,11 +28,7 @@ Regular: *2-fixed*.
32[2 1]
28[2 1]
33```
29```
34
30
35−;=
36− ;h3
37− ;div(id "colcol"): :: "colcol"
31+### "colcol"
38− ==
39−==
40
32
41Code comment
33Code comment
42
34
@@ -55,11 +47,7 @@ Code comment
55 :: to the input
47 :: to the input
56```
48```
57
49
58−;=
59− ;h3
60− ;div(id "colhep"): :- "colhep"
50+### :- "colhep"
61− ==
62−==
63
51
64`[%clhp p=hoon q=hoon]`: construct a cell (2-tuple).
52`[%clhp p=hoon q=hoon]`: construct a cell (2-tuple).
65
53
@@ -107,11 +95,7 @@ compiler does), `[a b]` is the same as `:-(a b)`.
107[~ 1]
95[~ 1]
108```
96```
109
97
110−;=
111− ;h3
112− ;div(id "colket"): :^ "colket"
98+### :^ "colket"
113− ==
114−==
115
99
116`[%clkt p=hoon q=hoon r=hoon s=hoon]`: construct a quadruple (4-tuple).
100`[%clkt p=hoon q=hoon r=hoon s=hoon]`: construct a quadruple (4-tuple).
117
101
@@ -138,11 +122,7 @@ Regular: *4-fixed*.
138[5 6 7 8]
122[5 6 7 8]
139```
123```
140
124
141−;=
142− ;h3
143− ;div(id "collus"): :+ "collus"
125+### :+ "collus"
144− ==
145−==
146
126
147
127
148`[%clls p=hoon q=hoon r=hoon]`: construct a triple (3-tuple).
128`[%clls p=hoon q=hoon r=hoon]`: construct a triple (3-tuple).
@@ -169,11 +149,7 @@ Regular: *3-fixed*.
169[%a ~ 'b']
149[%a ~ 'b']
170```
150```
171
151
172−;=
173− ;h3
174− ;div(id "cosig"): :~ "colsig"
152+### :~ "colsig"
175− ==
176−==
177
153
178`[%clsg p=(list hoon)]`: construct a null-terminated list.
154`[%clsg p=(list hoon)]`: construct a null-terminated list.
179
155
@@ -217,11 +193,7 @@ Regular: *running*.
217[5 3 4 2 1 ~]
193[5 3 4 2 1 ~]
218```
194```
219
195
220−;=
221− ;h3
222− ;div(id "coltar"): :* "coltar"
196+### :* "coltar"
223− ==
224−==
225
197
226`[%cltr p=(list hoon)]`: construct an n-tuple.
198`[%cltr p=(list hoon)]`: construct an n-tuple.
227
199
reference/hoon-expressions/rune/constants.md+4−20
@@ -9,11 +9,7 @@ se, because they have interpolations.)
9
9
10## Expressions
10## Expressions
11
11
12−;=
13− ;h3
14− ;div(id "cold"): `:_ "Cold Atom"`
12+### `:_ "Cold Atom"`
15− ==
16−==
17
13
18`[%rock p=term q=@]`; a constant, cold atom.
14`[%rock p=term q=@]`; a constant, cold atom.
19
15
@@ -48,11 +44,7 @@ We can see the contrast with warm atoms by using the compiler parser function, `
48[%rock p=%ud q=12]
44[%rock p=%ud q=12]
49```
45```
50
46
51−;=
52− ;h3
53− ;div(id "paths"): `:_ "Paths"`
47+### `:_ "Paths"`
54− ==
55−==
56
48
57`[%path p=(list (each @ta hoon))]`: path with interpolation.
49`[%path p=(list (each @ta hoon))]`: path with interpolation.
58
50
@@ -81,11 +73,7 @@ Irregular: `/this/is/a/path`.
81~
73~
82```
74```
83
75
84−;=
85− ;h3
86− ;div(id "strings"): `:_ "Strings with Interpolation"`
76+### `:_ "Strings with Interpolation"`
87− ==
88−==
89
77
90`[%knit p=(list (each @t hoon))]`: text string with interpolation.
78`[%knit p=(list (each @t hoon))]`: text string with interpolation.
91
79
@@ -133,11 +121,7 @@ String with interpolated prettyprinting:
133"hello, %world."
121"hello, %world."
134```
122```
135
123
136−;=
137− ;h3
138− ;div(id "warm"): `:_ "Warm Atoms"`
124+### `:_ "Warm Atoms"`
139− ==
140−==
141
125
142`[%sand p=term q=@]`; a constant, warm atom.
126`[%sand p=term q=@]`; a constant, warm atom.
143
127
reference/hoon-expressions/rune/dot.md+5−25
@@ -7,11 +7,7 @@ Anything Nock can do, Hoon can do also. These runes are used for carrying out N
7
7
8## Runes
8## Runes
9
9
10−;=
11− ;h3
12− ;div(id "dotket"): .^ "dotket"
10+### .^ "dotket"
13− ==
14−==
15
11
16`[%dtkt p=spec q=hoon]`: load from the Arvo namespace with a fake Nock instruction: 'Nock `12`''.
12`[%dtkt p=spec q=hoon]`: load from the Arvo namespace with a fake Nock instruction: 'Nock `12`''.
17
13
@@ -86,11 +82,7 @@ You can modify the time of the file listing quite simply and ask for a listing f
86
82
87`our` is the value for your ship's name.
83`our` is the value for your ship's name.
88
84
89−;=
90− ;h3
91− ;div(id "dotlus"): .+ "dotlus"
85+### .+ "dotlus"
92− ==
93−==
94
86
95`[%dtls p=hoon]`: increment an atom with Nock `4`.
87`[%dtls p=hoon]`: increment an atom with Nock `4`.
96
88
@@ -120,11 +112,7 @@ Irregular: `+(6)` is `.+(6)`.
120nest-fail
112nest-fail
121```
113```
122
114
123−;=
124− ;h3
125− ;div(id "dottar"): .* "dottar"
115+### .* "dottar"
126− ==
127−==
128
116
129`[%dttr p=hoon q=hoon]`: evaluate with Nock `2`.
117`[%dttr p=hoon q=hoon]`: evaluate with Nock `2`.
130
118
@@ -167,11 +155,7 @@ therefore possible to use Hoon as a typeless language.
1671
1551
168```
156```
169
157
170−;=
171− ;h3
172− ;div(id "dottis"): .= "dottis"
158+### .= "dottis"
173− ==
174−==
175
159
176`[%dtts p=hoon q=hoon]`: test for equality with Nock `5`.
160`[%dtts p=hoon q=hoon]`: test for equality with Nock `5`.
177
161
@@ -215,11 +199,7 @@ is a common cause of performance bugs.)
215nest-fail
199nest-fail
216```
200```
217
201
218−;=
219− ;h3
220− ;div(id "dotwut"): .? "dotwut"
202+### .? "dotwut"
221− ==
222−==
223
203
224`[%dtwt p=hoon]`: test for cell or atom with Nock `3`.
204`[%dtwt p=hoon]`: test for cell or atom with Nock `3`.
225
205
reference/hoon-expressions/rune/ket.md+10−50
@@ -12,11 +12,7 @@ it never allows invalid nests, it sometimes rejects valid nests.
12
12
13## Runes
13## Runes
14
14
15−;=
16− ;h3
17− ;div(id "ketbar"): ^| "ketbar"
15+### ^| "ketbar"
18− ==
19−==
20
16
21`[%ktbr p=hoon]`: convert a gold core to an iron core (contravariant).
17`[%ktbr p=hoon]`: convert a gold core to an iron core (contravariant).
22
18
@@ -52,11 +48,7 @@ The prettyprinter shows the core metal (`.` gold, `|` iron):
52<1|gcq [@ @n <250.yur 41.wda 374.hzt 100.kzl 1.ypj %151>]>
48<1|gcq [@ @n <250.yur 41.wda 374.hzt 100.kzl 1.ypj %151>]>
53```
49```
54
50
55−;=
56− ;h3
57− ;div(id "ketcol"): ^: "ketcol"
51+### "ketcol"
58− ==
59−==
60
52
61`[%ktcl p=spec]`: 'factory' gate for type `p`.
53`[%ktcl p=spec]`: 'factory' gate for type `p`.
62
54
@@ -92,11 +84,7 @@ In older versions of Hoon, a 'mold' was an idempotent gate that was guaranteed t
92ford: %ride failed to execute:
84ford: %ride failed to execute:
93```
85```
94
86
95−;=
96− ;h3
97− ;div(id "ketdot"): ^. "ketdot"
87+### ^. "ketdot"
98− ==
99−==
100
88
101`[%ktdt p=hoon q=hoon]`: typecast on value produced by passing `q` to `p`.
89`[%ktdt p=hoon q=hoon]`: typecast on value produced by passing `q` to `p`.
102
90
@@ -137,11 +125,7 @@ mint-vain
137~[22 33]
125~[22 33]
138```
126```
139
127
140−;=
141− ;h3
142− ;div(id "kethep"): ^- "kethep"
128+### ^- "kethep"
143− ==
144−==
145
129
146`[%kthp p=spec q=hoon]`: typecast by explicit type label.
130`[%kthp p=spec q=hoon]`: typecast by explicit type label.
147
131
@@ -185,11 +169,7 @@ infinite loop in the compiler).
185[~ ~.a]
169[~ ~.a]
186```
170```
187
171
188−;=
189− ;h3
190− ;div(id "ketlus"): ^+ "ketlus"
172+### ^+ "ketlus"
191− ==
192−==
193
173
194`[%ktls p=hoon q=hoon]`: typecast by inferred type.
174`[%ktls p=hoon q=hoon]`: typecast by inferred type.
195
175
@@ -208,11 +188,7 @@ Regular: *2-fixed*.
208'a'
188'a'
209```
189```
210
190
211−;=
212− ;h3
213− ;div(id "ketpad"): ^& "ketpad"
191+### ^& "ketpad"
214− ==
215−==
216
192
217`[%ktpd p=hoon]`: convert a core to a zinc core (covariant).
193`[%ktpd p=hoon]`: convert a core to a zinc core (covariant).
218
194
@@ -265,11 +241,7 @@ ford: %slim failed:
265ford: %ride failed to compute type:
241ford: %ride failed to compute type:
266```
242```
267
243
268−;=
269− ;h3
270− ;div(id "ketsig"): ^~ "ketsig"
244+### ^~ "ketsig"
271− ==
272−==
273
245
274`[%ktsg p=hoon]`: fold constant at compile time.
246`[%ktsg p=hoon]`: fold constant at compile time.
275
247
@@ -291,11 +263,7 @@ Regular: *1-fixed*.
291[%1 p=42]
263[%1 p=42]
292```
264```
293
265
294−;=
295− ;h3
296− ;div(id "kettar"): ^* "kettar"
266+### ^* "kettar"
297− ==
298−==
299
267
300`[%kttr p=spec]`: Produce example type value.
268`[%kttr p=spec]`: Produce example type value.
301
269
@@ -346,11 +314,7 @@ Irregular:
346""
314""
347```
315```
348
316
349−;=
350− ;h3
351− ;div(id "kettis"): ^= "kettis"
317+### ^= "kettis"
352− ==
353−==
354
318
355`[%ktts p=skin q=hoon]`: Bind name to a value.
319`[%ktts p=skin q=hoon]`: Bind name to a value.
356
320
@@ -386,11 +350,7 @@ a=1
386[b=1 c=2 d=[x=3 y4]]
350[b=1 c=2 d=[x=3 y4]]
387```
351```
388
352
389−;=
390− ;h3
391− ;div(id "ketwut"): ^? "ketwut"
353+### ^? "ketwut"
392− ==
393−==
394
354
395`[%ktwt p=hoon]`: convert any core to a lead core (bivariant).
355`[%ktwt p=hoon]`: convert any core to a lead core (bivariant).
396
356
reference/hoon-expressions/rune/lus.md+4−20
@@ -11,11 +11,7 @@ There are various arm runes you can use to produce different kinds of arms. Nor
11
11
12## Runes
12## Runes
13
13
14−;=
15− ;h3
16− ;div(id "lusbar"): +| "lusbar"
14+### +| "lusbar"
17− ==
18−==
19
15
20Chapter label.
16Chapter label.
21
17
@@ -63,11 +59,7 @@ Notice that `p.q` has the label `%numbers`. Contrast with:
63]
59]
64```
60```
65
61
66−;=
67− ;h3
68− ;div(id "lusbuc"): +$ "lusbuc"
62+### +$ "lusbuc"
69− ==
70−==
71
63
72Produce a structure arm (type definition).
64Produce a structure arm (type definition).
73
65
@@ -105,11 +97,7 @@ nest-fail
105[%.y 22]
97[%.y 22]
106```
98```
107
99
108−;=
109− ;h3
110− ;div(id "luslus"): ++ "luslus"
100+### ++ "luslus"
111− ==
112−==
113
101
114Produce a normal arm.
102Produce a normal arm.
115
103
@@ -144,11 +132,7 @@ Any Hoon expression, `q`, may be used to define the arm computation.
14412
13212
145```
133```
146
134
147−;=
148− ;h3
149− ;div(id "lustar"): +* "lustar"
135+### +* "lustar"
150− ==
151−==
152
136
153
137
154Produce a type constructor arm.
138Produce a type constructor arm.
reference/hoon-expressions/rune/mic.md+7−35
@@ -7,11 +7,7 @@ Miscellaneous useful macros.
7
7
8## Runes
8## Runes
9
9
10−;=
11− ;h3
12− ;div(id "miccol"): ;: "miccol"
10+### "miccol"
13− ==
14−==
15
11
16`[%mccl p=hoon q=(list hoon)]`: call a binary function as an n-ary function.
12`[%mccl p=hoon q=(list hoon)]`: call a binary function as an n-ary function.
17
13
@@ -61,11 +57,7 @@ Irregular: `:(add a b c)` is `;:(add a b c)`.
6112
5712
62```
58```
63
59
64−;=
65− ;h3
66− ;div(id "miclus"): ;+ "miclus"
60+### ;+ "miclus"
67− ==
68−==
69
61
70make a single XML node (Sail)
62make a single XML node (Sail)
71
63
@@ -124,11 +116,7 @@ One interesting thing about Sail is that it allows you to use complex Hoon expre
124]
116]
125```
117```
126
118
127−;=
128− ;h3
129− ;div(id "micmic"): ;; "micmic"
119+### ;; "micmic"
130− ==
131−==
132
120
133`[%mcmc p=spec q=hoon]`: normalize with a mold, asserting fixpoint.
121`[%mcmc p=spec q=hoon]`: normalize with a mold, asserting fixpoint.
134
122
@@ -170,11 +158,7 @@ Fails because not a fixpoint:
170! exit
158! exit
171```
159```
172
160
173−;=
174− ;h3
175− ;div(id "micfas"): ;/ "micfas"
161+### ;/ "micfas"
176− ==
177−==
178
162
179`[%mcnt p=hoon]`: tape as XML element.
163`[%mcnt p=hoon]`: tape as XML element.
180
164
@@ -191,11 +175,7 @@ Fails because not a fixpoint:
191[[%~. [%~. "foo] ~] ~]
175[[%~. [%~. "foo] ~] ~]
192```
176```
193
177
194−;=
195− ;h3
196− ;div(id "micsig"): ;~ "micsig"
178+### ;~ "micsig"
197− ==
198−==
199
179
200`[%mcsg p=hoon q=(list hoon)]`: glue a pipeline together with a
180`[%mcsg p=hoon q=(list hoon)]`: glue a pipeline together with a
201product-sample adapter.
181product-sample adapter.
@@ -293,11 +273,7 @@ But for multiple gates, we need it to connect the pipeline:
293"96acd"
273"96acd"
294```
274```
295
275
296−;=
297− ;h3
298− ;div(id "mictar"): ;* "mictar"
276+### ;* "mictar"
299− ==
300−==
301
277
302make a list of XML nodes from complex Hoon expression (Sail)
278make a list of XML nodes from complex Hoon expression (Sail)
303
279
@@ -349,11 +325,7 @@ If you need a complex Hoon expression to produce a `marl`, use the `;*` rune. O
349]
325]
350```
326```
351
327
352−;=
353− ;h3
354− ;div(id "mictis"): ;= "mictis"
328+### ;= "mictis"
355− ==
356−==
357
329
358make a list of XML nodes (Sail)
330make a list of XML nodes (Sail)
359
331
reference/hoon-expressions/rune/sig.md+12−60
@@ -7,11 +7,7 @@ Runes that use Nock `11` to pass non-semantic info to the interpreter.
7
7
8## Runes
8## Runes
9
9
10−;=
11− ;h3
12− ;div(id "sigban"): ~> "sigban"
10+### ~> "sigban"
13− ==
14−==
15
11
16`[%sgbn p=$@(term [p=term q=hoon]) q=hoon]`: raw hint, applied
12`[%sgbn p=$@(term [p=term q=hoon]) q=hoon]`: raw hint, applied
17to computation.
13to computation.
@@ -46,11 +42,7 @@ Running the compiler:
46[%10 p=[p=97 q=[%4 p=[%1 p=2]]] q=[%1 p=42]]
42[%10 p=[p=97 q=[%4 p=[%1 p=2]]] q=[%1 p=42]]
47```
43```
48
44
49−;=
50− ;h3
51− ;div(id "sigbar"): ~| "sigbar"
45+### ~| "sigbar"
52− ==
53−==
54
46
55
47
56`[%sgbr p=hoon q=hoon]`: tracing printf.
48`[%sgbr p=hoon q=hoon]`: tracing printf.
@@ -80,11 +72,7 @@ ford: build failed
80ford: build failed
72ford: build failed
81```
73```
82
74
83−;=
84− ;h3
85− ;div(id "sigbuc"): ~$ "sigbuc"
75+### ~$ "sigbuc"
86− ==
87−==
88
76
89`[%sgbs p=term q=hoon]`: profiling hit counter.
77`[%sgbs p=term q=hoon]`: profiling hit counter.
90
78
@@ -107,11 +95,7 @@ Regular: *2-fixed*.
1073
953
108```
96```
109
97
110−;=
111− ;h3
112− ;div(id "sigcab"): ~_ "sigcab"
98+### ~_ "sigcab"
113− ==
114−==
115
99
116`[%sgcb p=hoon q=hoon]`: user-formatted tracing printf.
100`[%sgcb p=hoon q=hoon]`: user-formatted tracing printf.
117
101
@@ -140,11 +124,7 @@ ford: build failed
140ford: build failed
124ford: build failed
141```
125```
142
126
143−;=
144− ;h3
145− ;div(id "cigcen"): ~% "sigcen"
127+### ~% "sigcen"
146− ==
147−==
148
128
149`[%sgcn p=term q=wing r=(list [term hoon]) s=hoon]`: jet registration.
129`[%sgcn p=term q=wing r=(list [term hoon]) s=hoon]`: jet registration.
150
130
@@ -234,11 +214,7 @@ Here we label the entire `++aesc` core for optimization. You can see the
234jet in `jets/e/aesc.c`.
214jet in `jets/e/aesc.c`.
235
215
236
216
237−;=
238− ;h3
239− ;div(id "sigled"): ~< "sigled"
217+### ~< "sigled"
240− ==
241−==
242
218
243
219
244`[%sgld p=$@(term [p=term q=hoon]) q=hoon]`: raw hint, applied to
220`[%sgld p=$@(term [p=term q=hoon]) q=hoon]`: raw hint, applied to
@@ -268,11 +244,7 @@ rather about its product.
268[%7 p=[%1 p=42] q=[%10 p=[p=97 q=[%4 p=[%0 p=1]]] q=[%0 p=1]]]
244[%7 p=[%1 p=42] q=[%10 p=[p=97 q=[%4 p=[%0 p=1]]] q=[%0 p=1]]]
269```
245```
270
246
271−;=
272− ;h3
273− ;div(id "siglus"): ~+ "siglus"
247+### ~+ "siglus"
274− ==
275−==
276
248
277`[%sgls p=hoon]`: cache a computation.
249`[%sgls p=hoon]`: cache a computation.
278
250
@@ -312,11 +284,7 @@ This should work fine:
312573.147.844.013.817.084.101
284573.147.844.013.817.084.101
313```
285```
314
286
315−;=
316− ;h3
317− ;div(id "sigfas"): ~/ "signet"
287+### ~/ "signet"
318− ==
319−==
320
288
321`[%sgnt p=term q=hoon]`: jet registration for gate with
289`[%sgnt p=term q=hoon]`: jet registration for gate with
322registered context.
290registered context.
@@ -343,11 +311,7 @@ From the kernel:
343 $(a (dec a), b +(b))
311 $(a (dec a), b +(b))
344```
312```
345
313
346−;=
347− ;h3
348− ;div(id "sigpad"): ~& "sigpad"
314+### ~& "sigpad"
349− ==
350−==
351
315
352`[%sgpd p=hoon q=hoon]`: debugging printf.
316`[%sgpd p=hoon q=hoon]`: debugging printf.
353
317
@@ -382,11 +346,7 @@ Regular: *2-fixed*.
382~
346~
383```
347```
384
348
385−;=
386− ;h3
387− ;div(id "sigtis"): ~= "sigtis"
349+### ~= "sigtis"
388− ==
389−==
390
350
391`[%sgts p=hoon q=hoon]`: detect duplicate.
351`[%sgts p=hoon q=hoon]`: detect duplicate.
392
352
@@ -418,11 +378,7 @@ This code traverses a tree and replaces all instances of `32` with
418
378
419Without `~=`, it would build a copy of a completely unchanged tree. Sad!
379Without `~=`, it would build a copy of a completely unchanged tree. Sad!
420
380
421−;=
422− ;h3
423− ;div(id "sigwut"): ~? "sigwut"
381+### ~? "sigwut"
424− ==
425−==
426
382
427`[%sgwt p=hoon q=hoon r=hoon]`: conditional debug printf.
383`[%sgwt p=hoon q=hoon r=hoon]`: conditional debug printf.
428
384
@@ -460,11 +416,7 @@ Regular: *4-fixed*.
460~
416~
461```
417```
462
418
463−;=
464− ;h3
465− ;div(id "sigzap"): ~! "sigzap"
419+### ~! "sigzap"
466− ==
467−==
468
420
469`[%sgzp p=hoon q=hoon]`: print type on compilation fail.
421`[%sgzp p=hoon q=hoon]`: print type on compilation fail.
470
422
reference/hoon-expressions/rune/terminators.md+2−10
@@ -7,11 +7,7 @@ The `--` and `==` are used as terminators: `--` for core expressions, and `==` f
7
7
8## Runes
8## Runes
9
9
10−;=
11− ;h3
12− ;div(id "hephep"): -- "hephep"
10+### -- "hephep"
13− ==
14−==
15
11
16##### Syntax
12##### Syntax
17
13
@@ -40,11 +36,7 @@ The `|%`, `|_`, and `|^` runes are used to create cores that can have arbitraril
4024
3624
41```
37```
42
38
43−;=
44− ;h3
45− ;div(id "tistis"): == "tistis"
39+### == "tistis"
46− ==
47−==
48
40
49##### Syntax
41##### Syntax
50
42
reference/hoon-expressions/rune/tis.md+14−70
@@ -23,11 +23,7 @@ different situations. Hence the whole family of `=` runes.
23
23
24## Runes
24## Runes
25
25
26−;=
27− ;h3
28− ;div(id "tisban"): => "tisban"
26+### => "tisban"
29− ==
30−==
31
27
32`[%tsgr p=hoon q=hoon]`: compose two expressions.
28`[%tsgr p=hoon q=hoon]`: compose two expressions.
33
29
@@ -49,11 +45,7 @@ Regular: *2-fixed*.
49[6 6]
45[6 6]
50```
46```
51
47
52−;=
53− ;h3
54− ;div(id "tisbar"): =| "tisbar"
48+### =| "tisbar"
55− ==
56−==
57
49
58
50
59`[%tsbr p=spec q=hoon]`: combine a default type value with the subject.
51`[%tsbr p=spec q=hoon]`: combine a default type value with the subject.
@@ -85,11 +77,7 @@ Speaking more loosely, `=|` usually "declares a variable" which is "uninitialize
857
777
86```
78```
87
79
88−;=
89− ;h3
90− ;div(id "tiscol"): =: "tiscol"
80+### "tiscol"
91− ==
92−==
93
81
94`[%tscl p=(list (pair wing hoon)) q=hoon]`: change multiple legs in the subject.
82`[%tscl p=(list (pair wing hoon)) q=hoon]`: change multiple legs in the subject.
95
83
@@ -118,11 +106,7 @@ This rune is like `=.`, but for modifying the values of multiple legs of the sub
118[b=3 c=4]
106[b=3 c=4]
119```
107```
120
108
121−;=
122− ;h3
123− ;div(id "tiscom"): =, "tiscom"
109+### =, "tiscom"
124− ==
125−==
126
110
127`[%tscm p=hoon q=hoon]`: expose namespace
111`[%tscm p=hoon q=hoon]`: expose namespace
128
112
@@ -157,11 +141,7 @@ With a dojo-defined face:
157[2 4]
141[2 4]
158```
142```
159
143
160−;=
161− ;h3
162− ;div(id "tisdot"): =. "tisdot"
144+### =. "tisdot"
163− ==
164−==
165
145
166`[%tsdt p=wing q=hoon r=hoon]`: change one leg in the subject.
146`[%tsdt p=wing q=hoon r=hoon]`: change one leg in the subject.
167
147
@@ -197,11 +177,7 @@ a new subject just like the old one except for a changed value at `p`. Note tha
197nest-fail
177nest-fail
198```
178```
199
179
200−;=
201− ;h3
202− ;div(id "tishep"): =- "tishep"
180+### =- "tishep"
203− ==
204−==
205
181
206`[%tshp p=hoon q=hoon]`: combine a new noun with the subject, inverted.
182`[%tshp p=hoon q=hoon]`: combine a new noun with the subject, inverted.
207
183
@@ -230,11 +206,7 @@ Regular: *2-fixed*.
2308
2068
231```
207```
232
208
233−;=
234− ;h3
235− ;div(id "tisket"): =^ "tisket"
209+### =^ "tisket"
236− ==
237−==
238
210
239`[%tskt p=skin q=wing r=hoon s=hoon]`: pin the head of a pair; change
211`[%tskt p=skin q=wing r=hoon s=hoon]`: pin the head of a pair; change
240a leg with the tail.
212a leg with the tail.
@@ -274,11 +246,7 @@ random number, so we use `=^`:
274[99 46]
246[99 46]
275```
247```
276
248
277−;=
278− ;h3
279− ;div(id "tisled"): =< "tisled"
249+### =< "tisled"
280− ==
281−==
282
250
283`[%tsgl p=hoon q=hoon]`: compose two expressions, inverted.
251`[%tsgl p=hoon q=hoon]`: compose two expressions, inverted.
284
252
@@ -315,11 +283,7 @@ Irregular: `foo:baz` is `=<(foo baz)`.
315[6 6]
283[6 6]
316```
284```
317
285
318−;=
319− ;h3
320− ;div(id "tislut"): =+ "tislus"
286+### =+ "tislus"
321− ==
322−==
323
287
324
288
325`[%tsls p=hoon q=hoon]`: combine a new noun with the subject.
289`[%tsls p=hoon q=hoon]`: combine a new noun with the subject.
@@ -342,11 +306,7 @@ Loosely speaking, `=+` is the simplest way of "declaring a variable."
342
306
343##### Examples
307##### Examples
344
308
345−;=
346− ;h3
347− ;div(id "tismic"): =; "tismic"
309+### =; "tismic"
348− ==
349−==
350
310
351`[%tssm p=skin q=hoon r=hoon]`: combine a named noun with the subject, possibly with type annotation; inverted order.
311`[%tssm p=skin q=hoon r=hoon]`: combine a named noun with the subject, possibly with type annotation; inverted order.
352
312
@@ -375,11 +335,7 @@ Regular: *3-fixed*.
3758
3358
376```
336```
377
337
378−;=
379− ;h3
380− ;div(id "tisfas"): =/ "tisfas"
338+### =/ "tisfas"
381− ==
382−==
383
339
384`[%tsfs p=skin q=hoon r=hoon]`: combine a named noun with the subject, possibly with type annotation.
340`[%tsfs p=skin q=hoon r=hoon]`: combine a named noun with the subject, possibly with type annotation.
385
341
@@ -428,11 +384,7 @@ Regular: *3-fixed*.
4288
3848
429```
385```
430
386
431−;=
432− ;h3
433− ;div(id "tissig"): =~ "tissig"
387+### =~ "tissig"
434− ==
435−==
436
388
437
389
438`[%tssg p=(list hoon)]`: compose many expressions.
390`[%tssg p=(list hoon)]`: compose many expressions.
@@ -468,11 +420,7 @@ Regular: *running*.
4683
4203
469```
421```
470
422
471−;=
472− ;h3
473− ;div(id "tistar"): =* "tistar"
423+### =* "tistar"
474− ==
475−==
476
424
477`[%tstr p=term q=hoon r=hoon]`: define an alias.
425`[%tstr p=term q=hoon r=hoon]`: define an alias.
478
426
@@ -505,11 +453,7 @@ The difference between aliasing and pinning is that pinning changes the subject,
505[2 2]
453[2 2]
506```
454```
507
455
508−;=
509− ;h3
510− ;div(id "tiswut"): =? "tiswut"
456+### =? "tiswut"
511− ==
512−==
513
457
514`[$tswt p=wing q=hoon r=hoon s=hoon]`: conditionally change one leg in the subject.
458`[$tswt p=wing q=hoon r=hoon s=hoon]`: conditionally change one leg in the subject.
515
459
reference/hoon-expressions/rune/wut.md+13−65
@@ -29,11 +29,7 @@ side is taken), it fails with an error.
29
29
30## Runes
30## Runes
31
31
32−;=
33− ;h3
34− ;div(id "wutban"): ?> "wutban"
32+### ?> "wutban"
35− ==
36−==
37
33
38`[%wtbn p=hoon q=hoon]`: positive assertion.
34`[%wtbn p=hoon q=hoon]`: positive assertion.
39
35
@@ -71,11 +67,7 @@ nest-fail
71123
67123
72```
68```
73
69
74−;=
75− ;h3
76− ;div(id "wutbar"): ?| "wutbar"
70+### ?| "wutbar"
77− ==
78−==
79
71
80`[%wtbr p=(list hoon)]`: logical OR.
72`[%wtbr p=(list hoon)]`: logical OR.
81
73
@@ -114,11 +106,7 @@ Irregular: `|(foo bar baz)` is `?|(foo bar baz)`.
114%.n
106%.n
115```
107```
116
108
117−;=
118− ;h3
119− ;div(id "wutcol"): ?: "wutcol"
109+### "wutcol"
120− ==
121−==
122
110
123`[%wtcl p=hoon q=hoon r=hoon]`: branch on a boolean test.
111`[%wtcl p=hoon q=hoon r=hoon]`: branch on a boolean test.
124
112
@@ -166,11 +154,7 @@ Note also that all other branching expressions reduce to `?:`.
1664
1544
167```
155```
168
156
169−;=
170− ;h3
171− ;div(id "wutdot"): ?. "wutdot"
157+### ?. "wutdot"
172− ==
173−==
174
158
175`[%wtdt p=hoon q=hoon r=hoon]`: branch on a boolean test, inverted.
159`[%wtdt p=hoon q=hoon r=hoon]`: branch on a boolean test, inverted.
176
160
@@ -207,11 +191,7 @@ As is usual with inverted forms, use `?.` when the yes-case expression is much t
207'but see how \'r is much heavier than \'q?'
191'but see how \'r is much heavier than \'q?'
208```
192```
209
193
210−;=
211− ;h3
212− ;div(id "wuthep"): ?- "wuthep"
194+### ?- "wuthep"
213− ==
214−==
215
195
216`[%wthp p=wing q=(list (pair spec value))]`: switch against a union, with no default.
196`[%wthp p=wing q=(list (pair spec value))]`: switch against a union, with no default.
217
197
@@ -273,11 +253,7 @@ will throw `mint-vain`.
273! nest-fail
253! nest-fail
274```
254```
275
255
276−;=
277− ;h3
278− ;div(id "wutket"): ?^ "wutket"
256+### ?^ "wutket"
279− ==
280−==
281
257
282`[%wtkt p=wing q=hoon r=hoon]`: branch on whether a wing
258`[%wtkt p=wing q=hoon r=hoon]`: branch on whether a wing
283of the subject is a cell.
259of the subject is a cell.
@@ -310,11 +286,7 @@ The type of the wing, `p`, must not be known to be either an atom or a cell, or
3103
2863
311```
287```
312
288
313−;=
314− ;h3
315− ;div(id "wutled"): ?< "wutled"
289+### ?< "wutled"
316− ==
317−==
318
290
319
291
320# `?< "wutled"`
292# `?< "wutled"`
@@ -355,11 +327,7 @@ nest-fail
355[12 14]
327[12 14]
356```
328```
357
329
358−;=
359− ;h3
360− ;div(id "wutlus"): ?+ "wutlus"
330+### ?+ "wutlus"
361− ==
362−==
363
331
364`[%wtls p=wing q=hoon r=(list (pair spec hoon))]`: switch against
332`[%wtls p=wing q=hoon r=(list (pair spec hoon))]`: switch against
365a union, with a default.
333a union, with a default.
@@ -416,11 +384,7 @@ If there is a case that is never taken you'll get a `mint-vain` error.
416240
384240
417```
385```
418
386
419−;=
420− ;h3
421− ;div(id "wutpad"): ?& "wutpad"
387+### ?& "wutpad"
422− ==
423−==
424
388
425`[%wtpd p=(list hoon)]`: logical AND.
389`[%wtpd p=(list hoon)]`: logical AND.
426
390
@@ -459,11 +423,7 @@ Irregular: `&(foo bar baz)` is `?&(foo bar baz)`.
459%.n
423%.n
460```
424```
461
425
462−;=
463− ;h3
464− ;div(id "wutsig"): ?~ "wutsig"
426+### ?~ "wutsig"
465− ==
466−==
467
427
468`[%wtsg p=wing q=hoon r=hoon]`: branch on whether a wing of the subject is null.
428`[%wtsg p=wing q=hoon r=hoon]`: branch on whether a wing of the subject is null.
469
429
@@ -490,11 +450,7 @@ It's bad style to use `?~` to test for any zero atom. Use it only for a true nu
4901
4501
491```
451```
492
452
493−;=
494− ;h3
495− ;div(id "wuttis"): ?= "wuttis"
453+### ?= "wuttis"
496− ==
497−==
498
454
499`[%wtts p=spec q=wing]`: test pattern match.
455`[%wtts p=spec q=wing]`: test pattern match.
500
456
@@ -530,11 +486,7 @@ A common error is `find.$`, meaning `p` is not a type.
530%.y
486%.y
531```
487```
532
488
533−;=
534− ;h3
535− ;div(id "wutvat"): ?@ "wutvat"
489+### ?@ "wutvat"
536− ==
537−==
538
490
539`[%wtpt p=wing q=hoon r=hoon]`: branch on whether a wing of the subject is an atom.
491`[%wtpt p=wing q=hoon r=hoon]`: branch on whether a wing of the subject is an atom.
540
492
@@ -566,11 +518,7 @@ The type of the wing, `p`, must not be known to be either an atom or a cell, or
5664
5184
567```
519```
568
520
569−;=
570− ;h3
571− ;div(id "wutzap"): ?! "wutzaps"
521+### ?! "wutzaps"
572− ==
573−==
574
522
575`[%wtzp p=hoon]`: logical NOT.
523`[%wtzp p=hoon]`: logical NOT.
576
524
reference/hoon-expressions/rune/zap.md+6−30
@@ -5,11 +5,7 @@ template = "doc.html"
5+++
5+++
6## Runes
6## Runes
7
7
8−;=
9− ;h3
10− ;div(id "zapban"): !> "zapban"
8+### !> "zapban"
11− ==
12−==
13
9
14`[%zpgr p=hoon]`: wrap a noun in its type.
10`[%zpgr p=hoon]`: wrap a noun in its type.
15
11
@@ -39,11 +35,7 @@ If you want just the type value, use a 'type spear'. This is `-:!>`, i.e., the
39#t/@ud
35#t/@ud
40```
36```
41
37
42−;=
43− ;h3
44− ;div(id "zapcol"): !: "zapcol"
38+### "zapcol"
45− ==
46−==
47
39
48`[%dbug p=hoon]`: turn on stack trace
40`[%dbug p=hoon]`: turn on stack trace
49
41
@@ -75,11 +67,7 @@ ford: %ride failed to execute:
75ford: %ride failed to execute:
67ford: %ride failed to execute:
76```
68```
77
69
78−;=
79− ;h3
80− ;div(id "zapdot"): !. "zapdot"
70+### !. "zapdot"
81− ==
82−==
83
71
84Turn off stack trace for a subexpression `p`
72Turn off stack trace for a subexpression `p`
85
73
@@ -123,11 +111,7 @@ ford: %ride failed to execute:
123ford: %ride failed to execute:
111ford: %ride failed to execute:
124```
112```
125
113
126−;=
127− ;h3
128− ;div(id "zaptis"): != "zaptis"
114+### != "zaptis"
129− ==
130−==
131
115
132`[%zpts p=hoon]`: make the Nock formula for a Hoon expression.
116`[%zpts p=hoon]`: make the Nock formula for a Hoon expression.
133
117
@@ -168,11 +152,7 @@ Don't confuse the `!=` rune with:
168
152
169The syntax difference is that a test for equality takes two subexpressions, and the `!=` rune only one.
153The syntax difference is that a test for equality takes two subexpressions, and the `!=` rune only one.
170
154
171−;=
172− ;h3
173− ;div(id "zapwut"): !? "zapwut"
155+### !? "zapwut"
174− ==
175−==
176
156
177`[%zpwt p=@ q=hoon]`: restrict Hoon version.
157`[%zpwt p=@ q=hoon]`: restrict Hoon version.
178
158
@@ -198,11 +178,7 @@ Regular: *2-fixed*.
198! exit
178! exit
199```
179```
200
180
201−;=
202− ;h3
203− ;div(id "zapzap"): !! "zapzap"
181+### !! "zapzap"
204− ==
205−==
206
182
207`[%zpzp ~]`: crash.
183`[%zpzp ~]`: crash.
208
184
using/udon.md+6−30
@@ -11,11 +11,7 @@ template = "doc.html"
11
11
12- #### [A Static Site](#static)
12- #### [A Static Site](#static)
13
13
14−;=
15− ;h2
16− ;div(id "guide"): Udon: A Guide
14+## A Guide
17− ==
18−==
19
15
20Udon is a way to write content for the web. It's a minimalist
16Udon is a way to write content for the web. It's a minimalist
21markup language for creating and rendering text documents, with a
17markup language for creating and rendering text documents, with a
@@ -362,11 +358,7 @@ Four score and seven years ago....
362
358
363It was the best of times, it was the worst of times...
359It was the best of times, it was the worst of times...
364
360
365−;=
366− ;h2
367− ;div(id "the-destination"): Here we are!
361+## Here we are!
368− ==
369−==
370```
362```
371
363
372###### Produces
364###### Produces
@@ -377,11 +369,7 @@ Four score and seven years ago....
377
369
378It was the best of times, it was the worst of times...
370It was the best of times, it was the worst of times...
379
371
380−;=
381− ;h2
382− ;div(id "the-destination"): Here we are!
372+## Here we are!
383− ==
384−==
385
373
386### Double Quote
374### Double Quote
387
375
@@ -584,11 +572,7 @@ indent the text in question with *eight spaces*.
584 Reel shadows of the indignant desert birds.
572 Reel shadows of the indignant desert birds.
585
573
586
574
587−;=
588− ;h2
589− ;div(id "sail"): Sail Expressions
575+## Sail Expressions
590− ==
591−==
592
576
593It's possible to use Udon as an HTML templating language akin to
577It's possible to use Udon as an HTML templating language akin to
594PHP, ERB, JSP, or Handlebars templates. This facility derives
578PHP, ERB, JSP, or Handlebars templates. This facility derives
@@ -625,11 +609,7 @@ Produces:
625==
609==
626
610
627
611
628−;=
629− ;h2
630− ;div(id "blog"): A Simple Udon Blog
612+## A Simple Udon Blog
631− ==
632−==
633
613
634Publishing using Udon is really easy. It uses the file extension `.udon`. Here we'll create a very simple blog and publish our first posts.
614Publishing using Udon is really easy. It uses the file extension `.udon`. Here we'll create a very simple blog and publish our first posts.
635
615
@@ -770,11 +750,7 @@ Use `;join` to keep up with comments as they get posted:
770
750
771That's it! Easy.
751That's it! Easy.
772
752
773−;=
774− ;h2
775− ;div(id "static"): A Static Site
753+## A Static Site
776− ==
777−==
778
754
779Hosting a static tree of content is easy. Let's put together a really
755Hosting a static tree of content is easy. Let's put together a really
780simple site for an imaginary Urbit meetup group.
756simple site for an imaginary Urbit meetup group.