4o: Molds

$abel

Original sin: type

Old type, same as the new $type.

Source

+$  abel  typo

Examples

> *abel
#t/*

$alas

Alias list

This is the type used in %brcb (|_ door) $hoon type for +* alias arms.

Source

+$  alas  (list (pair term hoon))

$atom

Just an atom

This is the same as @.

Source

+$  atom  @

Examples

> *atom
0

> `atom`'foo'
7.303.014

$aura

'type' of atom

By convention, a short name for a category of atom. +aura is circularly defined, with @ta being the +aura of the ASCII subset commonly used in urbit.

Source

+$  aura  @ta

Examples

See also: $base, aura reference

> `aura`'ux'
~.ux

$base

Base type

A base type that nouns are built from. A $base is either a noun, atom with aura, cell, boolean, null, or an empty set.

Source

+$  base            ::  base mold
  $@  $?  %noun     ::  any noun
          %cell     ::  any cell
          %flag     ::  loobean
          %null     ::  ~ == 0
          %void     ::  empty set
      ==            ::
  [%atom p=aura]    ::  atom

Examples

> *base
%void

> (ream '=|(^ !!)')
[%tsbr p=[%base p=%cell] q=[%zpzp ~]]

$woof

Simple embed

An atom or some $hoon.

Source

+$  woof  $@(@ [~ p=hoon])

Examples

> *woof
0

> `woof`[~ %base p=%cell]
[~ p=[%base p=%cell]]

> `woof`'foo'
7.303.014

$chum

Jet hint information

Jet hint information that must be present in the body of a ~/ or ~% rune. A $chum can optionally contain a kelvin version, jet vendor, and version number.

Source

+$  chum  $?  lef=term                                  ::  jet name
              [std=term kel=@]                          ::  kelvin version
              [ven=term pro=term kel=@]                 ::  vendor and product
              [ven=term pro=term ver=@ kel=@]           ::  all of the above
          ==                                            ::

Examples

> `chum`'hi'
lef=%hi

> (ream '~/(%lob.314 !!)')
[%sgfs p=[std=%lob kel=314] q=[%zpzp ~]]

$coil

Tuple of core information

Variance .p, subject type .q, and .r: optional compiled nock, and arms. Used as an intermediate step during compilation and converted to a core.

Source

+$  coil  $:  p=garb                               ::  name, wet=dry, vary
              q=type                               ::  context
              r=(pair seminoun (map term tome))    ::  chapters
          ==                                       ::

$garb

Core metadata

A triple of an optional name, polarity (wet/dry), and variance (%iron, etc).

Source

+$  garb  (trel (unit term) poly vair)

$poly

Polarity

Whether a core is wet or dry.

Source

+$  poly  ?(%wet %dry)

Cases of arms by variance model.

Source

+$  foot  $%  [%dry p=hoon]    ::  dry arm, geometric
              [%wet p=hoon]    ::  wet arm, generic
          ==

Lexical segment

Used for documentation.

Source

+$  link                               ::  lexical segment
          $%  [%chat p=term]           ::  |chapter
              [%cone p=aura q=atom]    ::  %constant
              [%frag p=term]           ::  .leg
              [%funk p=term]           ::  +arm
          ==

$crib

Summary and details

Summary and details for documentation.

Source

+$  crib  [summary=cord details=(list sect)]

$help

Documentation

Source

+$  help  [links=(list link) =crib]

$limb

Wing element

Reference into subject by tree address or name.

Source

+$  limb  $@  term                                      ::  wing element
          $%  [%& p=axis]                               ::  by geometry
              [%| p=@ud q=(unit term)]                  ::  by name
          ==                                            ::

Examples

> (ream '^^$')
[%wing p=~[[%.n p=2 q=[~ %$]]]]

$null

Null, nil, etc

Just ~.

Source

+$  null  ~

Examples

> *null
~

$onyx

Arm activation

Source

+$  onyx  (list (pair type foot))

$opal

Wing match

Arm or leg of a wing.

Source

+$  opal                                            ::  limb match
          $%  [%& p=type]                           ::  leg
              [%| p=axis q=(set [p=type q=foot])]   ::  arm
          ==                                        ::

$pica

Prose or code

A (pair ? cord). If %.y it's prose and if %.n it's code. Used in documentation.

Source

+$  pica  (pair ? cord)

$palo

Wing trace, match

A $vein and a $opal.

Source

+$  palo  (pair vein opal)

$plat

%hoon, %type, %nock or %tank

Source

+$  plat
          $?  %hoon
              %type
              %nock
              %tank
          ==

$pock

Changes

Source

+$  pock  (pair axis nock)

$port

Successful wing match

Source

+$  port  (each palo (pair type nock))

$spec

Structure definition AST.

Source

+$  spec                                                ::  structure definition
          $~  [%base %null]                             ::
          $%  [%base p=base]                            ::  base type
              [%dbug p=spot q=spec]                     ::  set debug
              [%leaf p=term q=@]                        ::  constant atom
              [%like p=wing q=(list wing)]              ::  reference
              [%loop p=term]                            ::  hygienic reference
              [%made p=(pair term (list term)) q=spec]  ::  annotate synthetic
              [%make p=hoon q=(list spec)]              ::  composed spec
              [%name p=term q=spec]                     ::  annotate simple
              [%over p=wing q=spec]                     ::  relative to subject
          ::                                            ::
              [%bcgr p=spec q=spec]                     ::  $>, filter: require
              [%bcbc p=spec q=(map term spec)]          ::  $$, recursion
              [%bcbr p=spec q=hoon]                     ::  $|, verify
              [%bccb p=hoon]                            ::  $_, example
              [%bccl p=[i=spec t=(list spec)]]          ::  $:, tuple
              [%bccn p=[i=spec t=(list spec)]]          ::  $%, head pick
              [%bcdt p=spec q=(map term spec)]          ::  $., read-write core
              [%bcgl p=spec q=spec]                     ::  $<, filter: exclude
              [%bchp p=spec q=spec]                     ::  $-, function core
              [%bckt p=spec q=spec]                     ::  $^, cons pick
              [%bcls p=stud q=spec]                     ::  $+, standard
              [%bcfs p=spec q=(map term spec)]          ::  $/, write-only core
              [%bcmc p=hoon]                            ::  $;, manual
              [%bcpm p=spec q=hoon]                     ::  $&, repair
              [%bcsg p=hoon q=spec]                     ::  $~, default
              [%bctc p=spec q=(map term spec)]          ::  $`, read-only core
              [%bcts p=skin q=spec]                     ::  $=, name
              [%bcpt p=spec q=spec]                     ::  $@, atom pick
              [%bcwt p=[i=spec t=(list spec)]]          ::  $?, full pick
              [%bczp p=spec q=(map term spec)]          ::  $!, opaque core
          ==                                            ::

Examples

> *spec
[%base p=%null]

> `spec`[%bccl ~[leaf+ud+1 leaf+ud+2]]
[%bccl p=[i=[%leaf p=%ud q=1] t=~[[%leaf p=%ud q=2]]]]

$tent

Model builder

Source

+$  tent
          $%  [%| p=wing q=tent r=(list spec)]    ::  ~(p q r...)
              [%& p=(list wing)]                  ::  a.b:c.d
          ==                                      ::

$tiki

Test case

This is used when compiling ?- expressions and similar.

Source

+$  tiki                                                ::  test case
          $%  [%& p=(unit term) q=wing]                 ::  simple wing
              [%| p=(unit term) q=hoon]                 ::  named wing
          ==                                            ::

$skin

Texture

This type is used for faces and similar by the compiler.

Source

+$  skin                             ::  texture
          $@  =term                  ::  name/~[term %none]
          $%  [%base =base]          ::  base match
              [%cell =skin =skin]    ::  pair
              [%dbug =spot =skin]    ::  trace
              [%leaf =aura =atom]    ::  atomic constant
              [%help =help =skin]    ::  describe
              [%name =term =skin]    ::  apply label
              [%over =wing =skin]    ::  relative to
              [%spec =spec =skin]    ::  cast to
              [%wash depth=@ud]      ::  strip faces
          ==                         ::

$tome

Core chapter

This type is used by the compiler for the contents of arms in cores.

Source

+$  tome  (pair what (map term hoon))

$tope

Topographic type

Describes the structure of a noun.

Source

+$  tope              ::  topographic type
  $@  $?  %&          ::  cell or atom
          %|          ::  atom
      ==              ::
  (pair tope tope)    ::  cell

Examples

> *tope
%.n

> `tope`[%| %&]
[p=%.n q=%.y]

+hoot

Hoon tools

Container core for internally-used XML structure types. XML structure types you'd typically use directly are defined in Standard Library section 5e.

Source

++  hoot
  |%

$beer:hoot

Simple embed

Either a tape element or interpolated hoon expression in an XML attribute.

Source

+$  beer  $@(char [~ p=hoon])

$mane:hoot

XML name+space

XML tag name and optional namespace.

Source

+$  mane  $@(@tas [@tas @tas])

Examples

> (en-xml:html ;foo;)
"<foo></foo>"

> (en-xml:html ;foo_bar;)
"<foo:bar></foo:bar>"

> `manx:hoot`;foo_bar;
[g=[n=[%foo %bar] a=~] c=~]

> `mane:hoot`n.g:`manx`;foo_bar;
[%foo %bar]

> `mane:hoot`n.g:`manx:hoot`;foo;
%foo

$manx:hoot

Dynamic XML node

An XML element which may contain text, attributes, and other elements.

.g is a $marx:hoot (a tag) and .c is a $marl:hoot (its contents).

Source

+$  manx  $~([[%$ ~] ~] [g=marx c=marl])

Examples

> *manx:hoot
[g=[n=%$ a=~] c=~

> `manx:hoot`;foo;
[g=[n=%foo a=~] c=~]

> (en-xml:html `manx:hoot`;foo;)
"<foo></foo>"

> =a ^-  manx:hoot
     ;foo
       ;bar: abc
       ;baz
         ;xxx: hello
       ==
     ==

> a
[ g=[n=%foo a=~]
    c
  ~[
    [ g=[n=%bar a=~]
      c=~[[g=[n=%$ a=~[[n=%$ v="abc"]]] c=~]]
    ]
    [ g=[n=%baz a=~]
        c
      ~[
        [ g=[n=%xxx a=~]
          c=~[[g=[n=%$ a=~[[n=%$ v="hello"]]] c=~]]
        ]
      ]
    ]
  ]
]

> (en-xml:html a)
"<foo><bar>abc</bar><baz><xxx>hello</xxx></baz></foo>"

$marl:hoot

Dynamic XML nodes

A list of XML nodes - maybe with interpolation and recursion. See $tuna:hoot.

Source

+$  marl  (list tuna)

Examples

> *marl
~

> ^-  marl:hoot
  ;=
    ;foo: abc
    ;bar: def
  ==
~[
  [g=[n=%foo a=~] c=~[[g=[n=%$ a=~[[n=%$ v=~['a' 'b' 'c']]]] c=~]]]
  [g=[n=%bar a=~] c=~[[g=[n=%$ a=~[[n=%$ v=~['d' 'e' 'f']]]] c=~]]]
]

> %-  en-xml:html
  ;baz
    ;=
      ;foo: abc
      ;bar: def
    ==
  ==
"<baz><foo>abc</foo><bar>def</bar></baz>"

$mart:hoot

Dynamic XML attributes

A list of atributes for an XML tag. For each list item, .n is a $mane:hoot (an attribute name with optional namespace) and .v is a (list beer:hoot) (the attribute itself, maybe with interpolated hoon).

Source

+$  mart  (list [n=mane v=(list beer)])

Examples

> *mart:hoot
~

> `manx:hoot`;foo.bar;
[g=[n=%foo a=~[[n=%class v=~['b' 'a' 'r']]]] c=~]

> `mart:hoot`a.g:`manx:hoot`;foo.bar;
~[[n=%class v=~['b' 'a' 'r']]]

> (en-xml:html ;foo.bar;)
"<foo class=\"bar\"></foo>"

$marx:hoot

Dynamic XML tag

An XML tag with optional attributes. .n is a $mane:hoot (the tag name with optional namespace) and .a is a $mart:hoot (any XML attributes).

Source

+$  marx  $~([%$ ~] [n=mane a=mart])

Examples

> `manx:hoot`;foo.bar;
[g=[n=%foo a=~[[n=%class v=~['b' 'a' 'r']]]] c=~]

> `marx:hoot`g:`manx:hoot`;foo.bar;
[n=%foo a=~[[n=%class v=~['b' 'a' 'r']]]]

> (en-xml:html ;foo.bar;)
"<foo class=\"bar\"></foo>"

$mare:hoot

Node or nodes

If %.y, a $manx:hoot (single XML node). If %.n, a $marl:hoot (list of XML nodes).

Source

+$  mare  (each manx marl)

Examples

> *mare:hoot
[%.y p=[g=[n=%$ a=~] c=~]]

> `mare:hoot`[%.y ;foo.bar;]
[%.y p=[g=[n=%foo a=~[[n=%class v=~['b' 'a' 'r']]]] c=~]]

> `mare:hoot`[%.n ~[;foo.bar; ;baz;]]
[%.n p=~[[g=[n=%foo a=~[[n=%class v=~['b' 'a' 'r']]]] c=~] [g=[n=%baz a=~] c=~]]]

$maru:hoot

Interpolation or nodes

If %.y, a $tuna:hoot. If %.n, a $marl:hoot.

Source

+$  maru  (each tuna marl)

$tuna:hoot

Maybe interpolation

Kinds of nodes. Either an ordinary $manx:hoot, or else a plain tape, a $marl:hoot, or a function call.

Source

+$  tuna
    $~  [[%$ ~] ~]
    $^  manx
    $:  ?(%tape %manx %marl %call)
        p=hoon
    ==

$hoon

Hoon AST

See the Rune section of the Hoon reference for details of what many of these relate to.

Source

+$  hoon                                                ::
  $~  [%zpzp ~]
  $^  [p=hoon q=hoon]                                   ::
  $%                                                    ::
    [%$ p=axis]                                         ::  simple leg
  ::                                                    ::
    [%base p=base]                                      ::  base spec
    [%bust p=base]                                      ::  bunt base
    [%dbug p=spot q=hoon]                               ::  debug info in trace
    [%eror p=tape]                                      ::  assembly error
    [%hand p=type q=nock]                               ::  premade result
    [%note p=note q=hoon]                               ::  annotate
    [%fits p=hoon q=wing]                               ::  underlying ?=
    [%knit p=(list woof)]                               ::  assemble string
    [%leaf p=(pair term @)]                             ::  symbol spec
    [%limb p=term]                                      ::  take limb
    [%lost p=hoon]                                      ::  not to be taken
    [%rock p=term q=*]                                  ::  fixed constant
    [%sand p=term q=*]                                  ::  unfixed constant
    [%tell p=(list hoon)]                               ::  render as tape
    [%tune p=$@(term tune)]                             ::  minimal face
    [%wing p=wing]                                      ::  take wing
    [%yell p=(list hoon)]                               ::  render as tank
    [%xray p=manx:hoot]                                 ::  ;foo; templating
  ::                                            ::::::  cores
    [%brbc sample=(lest term) body=spec]                ::  |$
    [%brcb p=spec q=alas r=(map term tome)]             ::  |_
    [%brcl p=hoon q=hoon]                               ::  |:
    [%brcn p=(unit term) q=(map term tome)]             ::  |%
    [%brdt p=hoon]                                      ::  |.
    [%brkt p=hoon q=(map term tome)]                    ::  |^
    [%brhp p=hoon]                                      ::  |-
    [%brsg p=spec q=hoon]                               ::  |~
    [%brtr p=spec q=hoon]                               ::  |*
    [%brts p=spec q=hoon]                               ::  |=
    [%brpt p=(unit term) q=(map term tome)]             ::  |@
    [%brwt p=hoon]                                      ::  |?
  ::                                            ::::::  tuples
    [%clcb p=hoon q=hoon]                               ::  :_ [q p]
    [%clkt p=hoon q=hoon r=hoon s=hoon]                 ::  :^ [p q r s]
    [%clhp p=hoon q=hoon]                               ::  :- [p q]
    [%clls p=hoon q=hoon r=hoon]                        ::  :+ [p q r]
    [%clsg p=(list hoon)]                               ::  :~ [p ~]
    [%cltr p=(list hoon)]                               ::  :* p as a tuple
  ::                                            ::::::  invocations
    [%cncb p=wing q=(list (pair wing hoon))]            ::  %_
    [%cndt p=hoon q=hoon]                               ::  %.
    [%cnhp p=hoon q=hoon]                               ::  %-
    [%cncl p=hoon q=(list hoon)]                        ::  %:
    [%cntr p=wing q=hoon r=(list (pair wing hoon))]     ::  %*
    [%cnkt p=hoon q=hoon r=hoon s=hoon]                 ::  %^
    [%cnls p=hoon q=hoon r=hoon]                        ::  %+
    [%cnsg p=wing q=hoon r=(list hoon)]                 ::  %~
    [%cnts p=wing q=(list (pair wing hoon))]            ::  %=
  ::                                            ::::::  nock
    [%dtkt p=spec q=hoon]                               ::  .^  nock 11
    [%dtls p=hoon]                                      ::  .+  nock 4
    [%dttr p=hoon q=hoon]                               ::  .*  nock 2
    [%dtts p=hoon q=hoon]                               ::  .=  nock 5
    [%dtwt p=hoon]                                      ::  .?  nock 3
  ::                                            ::::::  type conversion
    [%ktbr p=hoon]                                      ::  ^|  contravariant
    [%ktdt p=hoon q=hoon]                               ::  ^.  self-cast
    [%ktls p=hoon q=hoon]                               ::  ^+  expression cast
    [%kthp p=spec q=hoon]                               ::  ^-  structure cast
    [%ktpm p=hoon]                                      ::  ^&  covariant
    [%ktsg p=hoon]                                      ::  ^~  constant
    [%ktts p=skin q=hoon]                               ::  ^=  label
    [%ktwt p=hoon]                                      ::  ^?  bivariant
    [%kttr p=spec]                                      ::  ^*  example
    [%ktcl p=spec]                                      ::  ^:  filter
  ::                                            ::::::  hints
    [%sgbr p=hoon q=hoon]                               ::  ~|  sell on trace
    [%sgcb p=hoon q=hoon]                               ::  ~_  tank on trace
    [%sgcn p=chum q=hoon r=tyre s=hoon]                 ::  ~%  general jet hint
    [%sgfs p=chum q=hoon]                               ::  ~/  function j-hint
    [%sggl p=$@(term [p=term q=hoon]) q=hoon]           ::  ~<  backward hint
    [%sggr p=$@(term [p=term q=hoon]) q=hoon]           ::  ~>  forward hint
    [%sgbc p=term q=hoon]                               ::  ~$  profiler hit
    [%sgls p=@ q=hoon]                                  ::  ~+  cache=memoize
    [%sgpm p=@ud q=hoon r=hoon]                         ::  ~&  printf=priority
    [%sgts p=hoon q=hoon]                               ::  ~=  don't duplicate
    [%sgwt p=@ud q=hoon r=hoon s=hoon]                  ::  ~?  tested printf
    [%sgzp p=hoon q=hoon]                               ::  ~!  type on trace
  ::                                            ::::::  miscellaneous
    [%mcts p=marl:hoot]                                 ::  ;=  list templating
    [%mccl p=hoon q=(list hoon)]                        ::  ;:  binary to nary
    [%mcfs p=hoon]                                      ::  ;/  [%$ [%$ p ~] ~]
    [%mcgl p=spec q=hoon r=hoon s=hoon]                 ::  ;<  bind
    [%mcsg p=hoon q=(list hoon)]                        ::  ;~  kleisli arrow
    [%mcmc p=spec q=hoon]                               ::  ;;  normalize
  ::                                            ::::::  compositions
    [%tsbr p=spec q=hoon]                               ::  =|  push bunt
    [%tscl p=(list (pair wing hoon)) q=hoon]            ::  =:  q w= p changes
    [%tsfs p=skin q=hoon r=hoon]                        ::  =/  typed variable
    [%tsmc p=skin q=hoon r=hoon]                        ::  =;  =/(q p r)
    [%tsdt p=wing q=hoon r=hoon]                        ::  =.  r with p as q
    [%tswt p=wing q=hoon r=hoon s=hoon]                 ::  =?  conditional =.
    [%tsgl p=hoon q=hoon]                               ::  =<  =>(q p)
    [%tshp p=hoon q=hoon]                               ::  =-  =+(q p)
    [%tsgr p=hoon q=hoon]                               ::  =>  q w=subject p
    [%tskt p=skin q=wing r=hoon s=hoon]                 ::  =^  state machine
    [%tsls p=hoon q=hoon]                               ::  =+  q w=[p subject]
    [%tssg p=(list hoon)]                               ::  =~  hoon stack
    [%tstr p=(pair term (unit spec)) q=hoon r=hoon]     ::  =*  new style
    [%tscm p=hoon q=hoon]                               ::  =,  overload p in q
  ::                                            ::::::  conditionals
    [%wtbr p=(list hoon)]                               ::  ?|  loobean or
    [%wthp p=wing q=(list (pair spec hoon))]            ::  ?-  pick case in q
    [%wtcl p=hoon q=hoon r=hoon]                        ::  ?:  if=then=else
    [%wtdt p=hoon q=hoon r=hoon]                        ::  ?.  ?:(p r q)
    [%wtkt p=wing q=hoon r=hoon]                        ::  ?^  if p is a cell
    [%wtgl p=hoon q=hoon]                               ::  ?<  ?:(p !! q)
    [%wtgr p=hoon q=hoon]                               ::  ?>  ?:(p q !!)
    [%wtls p=wing q=hoon r=(list (pair spec hoon))]     ::  ?+  ?-  w=default
    [%wtpm p=(list hoon)]                               ::  ?&  loobean and
    [%wtpt p=wing q=hoon r=hoon]                        ::  ?@  if p is atom
    [%wtsg p=wing q=hoon r=hoon]                        ::  ?~  if p is null
    [%wthx p=skin q=wing]                               ::  ?#  if q matches p
    [%wtts p=spec q=wing]                               ::  ?=  if q matches p
    [%wtzp p=hoon]                                      ::  ?!  loobean not
  ::                                            ::::::  special
    [%zpcm p=hoon q=hoon]                               ::  !,
    [%zpgr p=hoon]                                      ::  !>
    [%zpgl p=spec q=hoon]                               ::  !<
    [%zpmc p=hoon q=hoon]                               ::  !;
    [%zpts p=hoon]                                      ::  !=
    [%zppt p=(list wing) q=hoon r=hoon]                 ::  !@
    [%zpwt p=$@(p=@ [p=@ q=@]) q=hoon]                  ::  !?
    [%zpzp ~]                                           ::  !!
  ==                                                    ::

Examples

> *hoon
[%zpzp ~]

> `hoon`(ream '|=([a=@ b=@] [b a])')
[ %brts
    p
  [ %bccl
      p
    [ i=[%bcts p=term=%a q=[%base p=[%atom p=~.]]]
      t=~[[%bcts p=term=%b q=[%base p=[%atom p=~.]]]]
    ]
  ]
  q=[%cltr p=~[[%wing p=~[%b]] [%wing p=~[%a]]]]
]

$tyre

List, term hoon

Associative list of [term hoon], used in jet hint processing.

Source

+$  tyre  (list [p=term q=hoon])                        ::

$tyke

List of 'maybe' hoons

List of (unit hoon), or gaps left to be inferred, in $path parsing. When you use a path such as /=base=/gen/code the path is in fact a $tyke, where the = are inferred from your current path.

Source

+$  tyke  (list (unit hoon))

$nock

Virtual nock.

See the Nock documentation for details.

Source

+$  nock  $^  [p=nock q=nock]                      ::  autocons
          $%  [%1 p=*]                             ::  constant
              [%2 p=nock q=nock]                   ::  compose
              [%3 p=nock]                          ::  cell test
              [%4 p=nock]                          ::  increment
              [%5 p=nock q=nock]                   ::  equality test
              [%6 p=nock q=nock r=nock]            ::  if, then, else
              [%7 p=nock q=nock]                   ::  serial compose
              [%8 p=nock q=nock]                   ::  push onto subject
              [%9 p=@ q=nock]                      ::  select arm and fire
              [%10 p=[p=@ q=nock] q=nock]          ::  edit
              [%11 p=$@(@ [p=@ q=nock]) q=nock]    ::  hint
              [%12 p=nock q=nock]                  ::  grab data from sky
              [%0 p=@]                             ::  axis select
          ==                                       ::

Examples

> !=([+(.) 20 -<])
[[4 0 1] [1 20] 0 4]

> (nock !=([+(.) 20]))
[p=[%4 p=[%0 p=1]] q=[%1 p=20]]

$note

Type annotation

Used for documentation.

Source

+$  note                                             ::  type annotation
          $%  [%help p=help]                         ::  documentation
              [%know p=stud]                         ::  global standard
              [%made p=term q=(unit (list wing))]    ::  structure
          ==                                         ::

$type

Hoon type type

Source

+$  type  $~  %noun                                ::
          $@  $?  %noun                            ::  any nouns
                  %void                            ::  no noun
              ==                                   ::
          $%  [%atom p=term q=(unit @)]            ::  atom / constant
              [%cell p=type q=type]                ::  ordered pair
              [%core p=type q=coil]                ::  object
              [%face p=$@(term tune) q=type]       ::  namespace
              [%fork p=(set type)]                 ::  union
              [%hint p=(pair type note) q=type]    ::  annotation
              [%hold p=type q=hoon]                ::  lazy evaluation
          ==                                       ::

Examples

> `type`[%cell [%atom %ud ~] [%atom %ud ~]]
#t/[@ud @ud]

$tony

$tone done right

An intermediate Nock computation result. Similar to a $toon but without a rendered stack trace.

Source

+$  tony                               ::  ++tone done right
          $%  [%0 p=tine q=*]          ::  success
              [%1 p=(set)]             ::  blocks
              [%2 p=(list [@ta *])]    ::  error ~_s
          ==                           ::

$tine

Partial noun

Source

+$  tine                            ::  partial noun
          $@  ~                     ::  open
          $%  [%& p=tine q=tine]    ::  half-blocked
              [%| p=(set)]          ::  fully blocked
          ==                        ::

$tool

Type decoration

Source

+$  tool  $@(term tune)

$tune

Complex

Source

+$  tune                                  ::  complex
          $~  [~ ~]                       ::
          $:  p=(map term (unit hoon))    ::  aliases
              q=(list hoon)               ::  bridges
          ==                              ::

$typo

Old type

Same as $type

Source

+$  typo  type

$vase

Type-value pair

Typed data. A $vase is used wherever typed data is explicitly worked with.

Source

+$  vase  [p=type q=*]

Examples

> *vase
[#t/* q=0]

> !>([2 2])
[#t/[@ud @ud] q=[2 2]]

> !>('foo')
[#t/@t q=7.303.014]

$vise

Old vase

Same as a $vase.

Source

+$  vise  [p=typo q=*]

$vial

co/contra/in/bi

Covariant, contravariant, invariant, bivariant.

Source

+$  vial  ?(%read %rite %both %free)

$vair

in/contra/bi/co

Core variance.

  • %gold - invariant payload.

  • %iron - contravariant sample.

  • %lead - bivariant sample.

  • %zinc - covariant sample.

See the Hoon School lesson on type polymorphism for more details.

Source

+$  vair  ?(%gold %iron %lead %zinc)

$vein

Search trace

Noun search trace.

Source

+$  vein  (list (unit axis))

$sect

Paragraph

Used in documentation.

Source

+$  sect  (list pica)

$whit

Documentation

Source

+$  whit                                                ::
          $:  lab=(unit term)                           ::  label
              boy=(unit (pair cord (list sect)))        ::  body
              def=(map term (pair cord (list sect)))    ::  definitions
              use=(set term)                            ::  defs used
          ==                                            ::

$what

Help slogan/section

Source

+$  what  (unit (pair cord (list sect)))

$wing

Search path

Address in subject. A $wing is a path to a value in the subject. A term alone is the trivial case of a $wing.

Source

+$  wing  (list limb)

Examples

> (ream 'a.+.c')
[%wing p=~[%a [%.y p=3] %c]]

> (wing +:(ream 'a.+.c'))
~[%a [%.y p=3] %c]

$block

Abstract identity of resource awaited

Source

+$  block
  path

$result

Internal interpreter result

Source

+$  result
  $@(~ seminoun)

$thunk

Fragment constructor

Source

+$  thunk
  $-(@ud (unit noun))

$doss

Profiling

Source

+$  doss
  $:  mon=moan               ::  sample count
      hit=(map term @ud)     ::  hit points
      cut=(map path hump)    ::  cut points
  ==

$moan

Profiling: sample metric

Source

+$  moan         ::  sample metric
  $:  fun=@ud    ::  samples in C
      noc=@ud    ::  samples in nock
      glu=@ud    ::  samples in glue
      mal=@ud    ::  samples in alloc
      far=@ud    ::  samples in frag
      coy=@ud    ::  samples in copy
      euq=@ud    ::  samples in equal
  ==             ::

$hump

Profiling

Source

+$  hump
  $:  mon=moan              ::  sample count
      out=(map path @ud)    ::  calls out of
      inn=(map path @ud)    ::  calls into
  ==

Last updated