Runes
!>
"zapgar"
[%zpgr p=hoon]
: wrap a noun in its type.
Produces
A cell whose tail is the product of p
, and whose head is the static type of p
.
Syntax
Regular: 1-fixed.
Discussion
In Hoon, a dynamic type is a static type compiled at runtime. This type-noun cell is generally called a vase
.
Examples
> !>(1)
[#t/@ud q=1]
If you want just the type value, use a 'type spear'. This is -:!>
, i.e., the head of the cell produced by !>
:
> -:!>(1)
#t/@ud
!<
"zapgal"
[%zpld p=spec q=hoon]
Takes a mold and a vase
and dynamically checks that the type in the vase
matches the mold.
Produces
The value of vase
typed with the type of the mold if possible, else a
nest-fail
.
Syntax
Regular: 2-fixed
Discussion
This is something like a partial inverse to the !>
rune and can be used to extract
a typed value from a vase
.
Examples
> !< @ !> ~zod
0
> !< @p !> 0
nest-fail
> =m !> 0
> =n !> 1
> !< [@ @] (slop m n)
[0 1]
!:
"zapcol"
[%dbug p=hoon]
: turn on stack trace
Produces
The product of p
unless p
crashes, in which case a stack trace is given.
Syntax
Regular: 1-fixed.
!: p=hoon
Discussion
!:
is used to turn on a debugging stack trace option for any code you have in p
.
Examples
> ?:(=(0 1) 123 !!)
ford: %ride failed to execute:
> !: ?:(=(0 1) 123 !!)
/~zod/home/~2018.10.15..19.50.06..74af:<[1 5].[1 22]>
/~zod/home/~2018.10.15..19.50.06..74af:<[1 19].[1 21]>
ford: %ride failed to execute:
!.
"zapdot"
Turn off stack trace for a subexpression p
Produces
The product of p
. If p
crashes, no stack trace entries are given for that code.
Syntax
Regular: 1-fixed.
!. p=hoon
p
is any Hoon expression.
Discussion
!.
is used to turn off a debugging stack trace option for any code you have in p
. This rune can be embedded under a !:
rune for inner loops of your code that you don't want or need to trace. This is especially useful if a trace overflows the stack.
Examples
> %.(1 |=(a=@ ^-(@ ?:(=(a 10) !! $(a +(a))))))
ford: %ride failed to execute:
> !: %.(1 |=(a=@ ^-(@ ?:(=(a 10) !! $(a +(a))))))
/~zod/home/~2018.10.15..20.01.21..6b0c:<[1 5].[1 49]>
/~zod/home/~2018.10.15..20.01.21..6b0c:<[1 17].[1 47]>
/~zod/home/~2018.10.15..20.01.21..6b0c:<[1 22].[1 46]>
/~zod/home/~2018.10.15..20.01.21..6b0c:<[1 36].[1 45]>
...skipping some lines...
/~zod/home/~2018.10.15..20.01.21..6b0c:<[1 17].[1 47]>
/~zod/home/~2018.10.15..20.01.21..6b0c:<[1 22].[1 46]>
/~zod/home/~2018.10.15..20.01.21..6b0c:<[1 33].[1 35]>
ford: %ride failed to execute:
> !: %.(1 !.(|=(a=@ ^-(@ ?:(=(a 10) !! $(a +(a)))))))
/~zod/home/~2018.10.15..20.01.35..0529:<[1 5].[1 53]>
ford: %ride failed to execute:
!=
"zaptis"
[%zpts p=hoon]
: make the Nock formula for a Hoon expression.
Produces
The Nock generated by p
.
Syntax
Regular: 1-fixed.
Discussion
Don't confuse !=
with a negation, !
, followed by a test for equality, =(10 11)
.
Examples
> !=(20)
[1 20]
> !=(~zod)
[1 0]
> !=((add 2 2))
[8 [9 3.110.356 0 31] 9 2 [0 4] [7 [0 3] 1 2 2] 0 11]
Don't confuse the !=
rune with:
> !=(10 11)
%.y
> !=(10 10)
%.n
The syntax difference is that a test for equality takes two subexpressions, and the !=
rune only one.
!?
"zapwut"
[%zpwt p=@ q=hoon]
: restrict Hoon version.
Produces
q
, if p
is greater than or equal to the Hoon kelvin version.
(Versions count down; the current version is 141.)
Syntax
Regular: 2-fixed.
Examples
> !?(264 (add 2 2))
4
> !?(164 (add 2 2))
4
> !?(64 (add 2 2))
! exit
!!
"zapzap"
[%zpzp ~]
: crash.
Produces
Nothing. Always crashes, with type %void
.
Syntax
!!
Discussion
%void
nests in every other type, so you can stub out anything with !!
.
Examples
> !!
ford: build failed