urbit/base/pub/doc/hoon/runes/br/brfs.md
2015-04-29 18:48:45 -04:00

2.3 KiB

barfas, |/, %brfs

Door with tile

|/ is a synthetic rune that produces a %gold door with sample [%bctr p] and list of arms q. The list of arms must be closed with a --.

|/ is similar to |_ in that it accepts a sample for the set of arms , but differs in that it accepts wet or %ash arms.

See also

barcab, |_, %brcb barcen, |%, %brcn

Produces

Twig: [%brfs p=tile q=(map term foot)]

Sample

p is a tile. q is a map with ++term keys and ++foot values.

Tall form

|/  p
+-  p.n.q
  q.n.q
--

Wide form

None

Irregular form

None

Examples

/~zod/try=> =fas  |/
      a=@
      +-  two  (mul a 2)
      +-  for  (div a 2)
      --
new var %fas
/~zod/try=> ~(two fas 2)
4
/~zod/try=> ~(for fas ~(for fas ~(two fas 12)))
6

In this simple example we're creating a door with two arms. One arm divides our sample by two, the other divides by two.

/~zod/try=> =kom
                  |_  a=(list)
                  ++  hed  -.a
                  ++  tal  +.a
                  --
new var %kom
/~zod/try=> =kot
                  |/  a=(list)
                  +-  hed  -.a
                  +-  tal  +.a
                  --
new var %kot
/~zod/try=> ~(tal kom "abc")
t=~[98 99]
/~zod/try=> ~(tal kot "abc")
t="bc"
/~zod/try=> ~(tal kot [1 2 3 ~])
[2 3 ~]
/~zod/try=> ~(tal kom [1 2 3 ~])
t=~[2 3]

Here we're demonstrating the difference between |_ and |/. We create a nearly identical door using both runes, each with an arm that produces the tail of the sample, a. You can see that our wet gates use the sample as a tile to produce well-typed output.

++  by                                                  ::  map engine
      ~/  %by
      |/  a=(map)
      ::
      +-  all
      ~/  %all
      |*  b=$+(* ?)
      |-  ^-  ?
      ?@  a
        &
      ?&((b q.n.a) $(a l.a) $(a r.a))

All of the container engines in hoon.hoon use |/ to set up the tile for their operations. In ++by, the map engine, |/ creates a door that takes a map that is passed to its arms. See more about using ++by in the library.