2q: Molds and Mold-Builders

    ++char

    Character

    A single character. Aura @tD designates a single UTF-8 byte. All parsers consume tapes, which are lists of char.

    Source

        ++  char  @tD
    

    Examples

        > *char
        ''
    
        > `@tD`97
        'a'
    

    ++cord

    UTF-8 text

    One of Hoon's two string types (the other being tape). A cord is an atom of UTF-8 text.

    Source

        ++  cord  @t
    

    Examples

        > *cord
        ''
    
        > `@ux`'foobar'
        0x7261.626f.6f66
    
        > `@t`97
        'a'
    
        > `@`'urbit'
        499.984.265.845
    
        > `@t`499.984.265.845
        'urbit'
    

    Discussion

    Aura @t designates a Unicode atom, little-endian: the first character in the text is the least-significant byte.

    trip converts from cord to tape, and crip converts from tape to cord.


    ++date

    Point in time

    A boolean designating AD or BC, a year atom, a month atom, and a tarp, which is a day atom and a time.

    Source

        ++  date  [[a=? y=@ud] m=@ud t=tarp]
    

    Examples

        > *date
        [[a=%.y y=0] m=0 t=[d=0 h=0 m=0 s=0 f=~]]
    
        > `date`(yore ~2014.6.6..21.09.15..0a16)
        [[a=%.y y=2.014] m=6 t=[d=6 h=21 m=9 s=15 f=~[0xa16]]]
    
        > now
        ~2018.5.25..17.55.15..9ad8
    

    Discussion

    See also: year, yore


    ++knot

    ASCII

    An atom type that only permits ASCII characters.

    Source

    
        ++  knot  @ta
    

    Examples

        > *knot
        ~.
    
        > `@ta`105
        ~.i
    

    ++tang

    Generic print structure

    A list of tanks. It's for printing types and bottom-up printing of stack traces.

    Source

        ++  tang  (list tank)
    

    Examples

        > *tang
        ~
    
        > (~(win re [%palm ["1" "2" "3" "4"] [%leaf "foobar"] [%leaf "bazbud"] [%leaf "zzzzzzqaaa"] ~]) 0 50)
        <<"23foobar1bazbud1zzzzzzqaaa4">>
    
        > (~(win re [%palm ["1" "2" "3" "4"] [%leaf "foobar"] [%leaf "bazbud"] [%leaf "zzzzzzqaaa"] ~]) 0 10)
        <<"2   foobar" "  bazbud" "zzzzzzqaaa">>
    
        > (~(win re [%rose ["1" "2" "3"] [%leaf "foobar"] [%leaf "bazbud"] ~]) 0 20)
        <<"2foobar1bazbud3">>
    
        > (~(win re [%rose ["1" "2" "3"] [%leaf "foobar"] [%leaf "bazbud"] ~]) 0 10)
        <<"2 foobar" "  bazbud" "3">>
    

    ++tank

    Pretty-printing structure

    A tank is one of three cases: a %leaf is simply a string (a printed line); a %palm is list of tank delimited by the strings in p, with back-steps at new lines; and a %rose is a list of tank delimited by the strings in p without back-steps at new lines.

    Source

        ++  tank  $%  [$leaf p=tape]
                      $:  $palm
                          p=[p=tape q=tape r=tape s=tape]
                          q=(list tank)
                      ==
                      $:  $rose
                          p=[p=tape q=tape r=tape]
                          q=(list tank)
                      ==
                  ==
    

    Examples

        > *tank
        [%rose p=[p="" q="" r=""] q=~]
    
        > (wash [0 80] >(bex 20) (bex 19)<)                               :: at 80 cols
        <<"[1.048.576 524.288]">>
    
        > (wash [0 15] >(bex 20) (bex 19)<)                               :: at 15 cols
        <<"[ 1.048.576" "  524.288" "]">>
    
        > [(bex 150) (bex 151)]                                           :: at 80 cols
        [ 1.427.247.692.705.959.881.058.285.969.449.495.136.382.746.624
          2.854.495.385.411.919.762.116.571.938.898.990.272.765.493.248
        ]
    
        > (wash [0 40] >(bex 150) (bex 151)<)
        <<
          "[ \\/1.427.247.692.705.959.881.058.285.\\/"
          "    969.449.495.136.382.746.624"
          "  \\/                                  \\/"
          "  \\/2.854.495.385.411.919.762.116.571.\\/"
          "    938.898.990.272.765.493.248"
          "  \\/                                  \\/"
          "]"
        >>
    

    ++tape

    List of characters

    One of Hoon's two string types, the other being ++cord. A tape is a list of char.

    Source

        ++  tape  (list @tD)
    

    Examples

        > *tape
        ""
    
        > `tape`"foobar"
        "foobar"
    
        >`(list @t)`"foobar"
        <|f o o b a r|>
    
        >`(list @tD)`"foobar"
        "foobar"
    
        > `(list @)`"foobar"
        ~[102 111 111 98 97 114]
    

    ++tarp

    Parsed time

    The time component of a date: day, hour, minute, second and a list of @ux for precision.

    Source

        ++  tarp  [d=@ud h=@ud m=@ud s=@ud f=(list @ux)]
    

    Examples

        > *tarp
        [d=0 h=0 m=0 s=0 f=~]
    
        > (yell now)
        [d=106.751.991.821.625 h=22 m=58 s=10 f=~[0x44ff]]
    
        > `tarp`(yell ~2014.6.6..21.09.15..0a16)
        [d=106.751.991.820.172 h=21 m=9 s=15 f=~[0xa16]]
    
        > (yell ~d20)
        [d=20 h=0 m=0 s=0 f=~]
    

    ++term

    Hoon constant

    A restricted text atom for Hoon constants. The only characters permitted are lowercase ASCII letters, -, and 0-9, the latter two of which cannot be the first character. The syntax for @tas is the text itself, always preceded by %. The empty @tas has a special syntax, $.

    Source

            ++  term  @tas
    

    Examples

        > *term
        %$
    
        > *%term
        %term
    
        > %dead-fish9
        %dead-fish9
    
        > -:!>(%dead-fish9)
        #t/$dead-fish9
    

    ++wain

    List of strings

    A list of cords. A wain is used instead of a single cord with \n.

    Source

        ++  wain  (list cord)
    

    Examples

        > *wain
        <||>
    
        > `wain`/som/del/rok
        <|som del rok|>
    

    ++wall

    List of list of characters

    A list of tapes. wall is used instead of a single tape with \n.

    Source

        ++  wall  (list tape)
    

    Examples

        > *wall
        <<>>
    
        > `wall`(wash [0 20] leaf+<(bex 256)>)
        <<
          "\\/115.792.089.237.\\/"
          "  316.195.423.570."
          "  985.008.687.907."
          "  853.269.984.665."
          "  640.564.039.457."
          "  584.007.913.129."
          "  639.936"
          "\\/                \\/"
        >>