Urbit
  • Introduction
  • Development

    • Getting Started
    • Environment Setup
    • Grants Program
    • Project Repositories
    • Precepts
    • System Overview

      • Arvo
      • Hoon
      • Nock
      • Vere
      • Azimuth
      • Cryptography
      • Arvo

        • Overview
        • Reference

          • Cryptography
          • Filesystem Hierarchy
          • Ames

            • Overview
            • Cryptography
            • API Reference
            • Behn

              • Overview
              • API Reference
              • Clay

                • Overview
                • Architecture
                • Using Clay
                • Data Types
                • Scry Reference
                • API Reference
                • Examples
                • Dill

                  • Overview
                  • API Reference
                  • Eyre

                    • Overview
                    • External API Reference
                    • Internal API Reference
                    • Scry Reference
                    • Data Types
                    • Examples
                    • Ford

                      • Overview
                      • Gall

                        • Overview
                        • Iris

                          • API Reference
                          • Jael

                            • API Reference
                            • Concepts

                              • Subscriptions
                              • Tutorials

                                • Move Trace
                              • Userspace

                                • Overview
                                • Gall

                                  • Overview
                                  • Tutorial
                                  • API Reference
                                  • Graph Store

                                    • Graph Store Overview
                                    • Data Structure Overview
                                    • Validator Walkthrough
                                    • Advanced Info
                                    • Threads

                                      • Overview
                                      • HTTP API
                                      • Reference
                                      • Basics

                                        • Fundamentals
                                        • Bind
                                        • Input
                                        • Output
                                        • Summary
                                        • Gall

                                          • Start Thread
                                          • Take Result
                                          • Take Facts
                                          • Stop Thread
                                          • Poke Thread
                                          • Examples

                                            • Fetch JSON
                                            • Child Thread
                                            • Main-loop
                                            • Poke Agent
                                            • Scry
                                            • Take Fact
                                          • Landscape

                                            • Overview
                                            • API Reference

                                              • Graph Store
                                          • Hoon

                                            • Overview
                                            • Hoon School

                                              • 1.1 Setup
                                              • 1.1.1 Walkthrough: List of Numbers
                                              • 1.2 Nouns
                                              • 1.3 Hoon Syntax
                                              • 1.3.1 Walkthrough: Conditionals
                                              • 1.4 Gates (Hoon Functions)
                                              • 1.4.1 Walkthrough: Recursion
                                              • 1.5 Lists
                                              • 1.5.1 Walkthrough: Fibonacci Sequence
                                              • 1.6 The Subject and Its Legs
                                              • 1.6.1 Walkthrough: Ackermann Function
                                              • 1.7 Arms and Cores
                                              • 1.7.1 Walkthrough: Caesar Cipher
                                              • 1.8 Doors
                                              • 1.8.1 Bank Account
                                              • 1.9 Generators
                                              • 2.1 Atoms, Auras, and Simple Cell Types
                                              • 2.2 Type Checking and Type Inference
                                              • 2.3 Structures and Complex Types
                                              • 2.3.1 Walkthrough: Libraries
                                              • 2.3.2 Molds
                                              • 2.4 Standard Library: Trees, Sets, and Maps
                                              • 2.5 Type Polymorphism
                                              • 2.5.1 Walkthrough: Iron Polymorphism and Wet Polymorphism
                                              • 2.5.2 Walkthrough: Lead Polymorphism
                                              • 2.6 Behn
                                              • 2.7 Gall
                                              • 2.7.1 Gall Walkthrough: Egg Timer
                                              • Guides

                                                • CLI apps
                                                • Parsing
                                                • Writing Aqua Tests
                                                • Reference

                                                  • Cheat Sheet
                                                  • Irregular forms
                                                  • Hoon Errors
                                                  • Hoon Style Guide
                                                  • Basic Types
                                                  • Advanced Types
                                                  • Auras
                                                  • Runes

                                                    • Atoms and strings
                                                    • Nock . ('dot')
                                                    • Wild ! ('zap')
                                                    • Change Subject = ('tis')
                                                    • Conditionals ? ('wut')
                                                    • Cores | ('bar')
                                                    • Arms + ('lus')
                                                    • Cells : ('col')
                                                    • Calls % ('cen')
                                                    • Casts ^ ('ket')
                                                    • Structures $ ('buc')
                                                    • Make ; ('mic')
                                                    • Hints ~ ('sig')
                                                    • Terminators -- and ==
                                                    • Limbs and wings

                                                      • Limbs
                                                      • Wings
                                                      • Standard library

                                                        • Table of Contents
                                                        • 1a: Basic Arithmetic
                                                        • 1b: Tree Addressing
                                                        • 1c: Molds and Mold-Builders
                                                        • 2a: Unit Logic
                                                        • 2b: List Logic
                                                        • 2c: Bit Arithmetic
                                                        • 2d: Bit Logic
                                                        • 2e: Insecure Hashing
                                                        • 2f: Noun Ordering
                                                        • 2g: Unsigned Powers
                                                        • 2h: Set Logic
                                                        • 2i: Map Logic
                                                        • 2j: Jar and Jug Logic
                                                        • 2k: Queue Logic
                                                        • 2l: Container from Container
                                                        • 2m: Container from Noun
                                                        • 2n: Functional Hacks
                                                        • 2o: Normalizing Containers
                                                        • 2p: Serialization
                                                        • 2q: Molds and Mold-Builders
                                                        • 3a: Modular and Signed Ints
                                                        • 3b: Floating Point
                                                        • 3c: Urbit Time
                                                        • 3d: SHA Hash Family
                                                        • 3e: AES encryption (Removed)
                                                        • 3f: Scrambling
                                                        • 3g: Molds and Mold-Builders
                                                        • 4a: Exotic Bases
                                                        • 4b: Text Processing
                                                        • 4c: Tank Printer
                                                        • 4d: Parsing (Tracing)
                                                        • 4e: Parsing (Combinators)
                                                        • 4f: Parsing (Rule-Builders)
                                                        • 4g: Parsing (Outside Caller)
                                                        • 4h: Parsing (ASCII Glyphs)
                                                        • 4i: Parsing (Useful Idioms)
                                                        • 4j: Parsing (Bases and Base Digits)
                                                        • 4k: Atom Printing
                                                        • 4l: Atom Parsing
                                                        • 4m: Formatting Functions
                                                        • 4n: Virtualization
                                                        • 4o: Molds
                                                        • 5a: Compiler Utilities
                                                        • 5b: Macro Expansion
                                                        • 5c: Compiler Backend & Prettyprinter
                                                        • 5d: Parser
                                                        • 5e: Caching Compiler
                                                        • 5f: Molds and Mold-Builders
                                                        • 5g: profiling support
                                                    • Nock

                                                      • Nock Definition
                                                      • Explanation
                                                      • Example
                                                      • Implementations
                                                      • Vere

                                                        • C Runtime System
                                                        • Land of Nouns
                                                        • API overview by prefix
                                                        • C in Urbit
                                                        • Writing Jets
                                                        • Cryptography
                                                        • Azimuth

                                                          • Overview
                                                          • Life and Rift
                                                          • Advanced Azimuth Tools
                                                          • Glossary

                                                            • Ames
                                                            • Aqua
                                                            • Arm
                                                            • Arvo
                                                            • Atom
                                                            • Azimuth
                                                            • Battery
                                                            • Behn
                                                            • Breach
                                                            • Bridge
                                                            • Censures
                                                            • Ceremony
                                                            • chat
                                                            • Claims
                                                            • Clay
                                                            • Comet
                                                            • Core
                                                            • Delegated Sending
                                                            • Desk
                                                            • Dill
                                                            • Document Proposal
                                                            • Dojo
                                                            • Door
                                                            • Ecliptic
                                                            • Event Log
                                                            • Eyre
                                                            • Ford
                                                            • Galaxy
                                                            • Gall
                                                            • Gate
                                                            • HD Wallet
                                                            • Hoon
                                                            • Invite Tree
                                                            • Iris
                                                            • Jael
                                                            • Jaque
                                                            • Keyfile
                                                            • Landscape
                                                            • Mark
                                                            • Moon
                                                            • Nock
                                                            • Noun
                                                            • OTA Updates
                                                            • Payload
                                                            • pH
                                                            • Pier
                                                            • Pill
                                                            • Planet
                                                            • Proxies
                                                            • Replay
                                                            • Sail/Udon
                                                            • Senate
                                                            • Ship
                                                            • ship.arvo.network
                                                            • Star
                                                            • |sync
                                                            • Trap
                                                            • Upgrade Proposal
                                                            • Vane
                                                            • Vere
                                                            • Voting
                                                            • Wallet-Generator
                                                            Urbit
                                                            • Introduction
                                                            • Development

                                                              • Getting Started
                                                              • Environment Setup
                                                              • Grants Program
                                                              • Project Repositories
                                                              • Precepts
                                                              • System Overview

                                                                • Arvo
                                                                • Hoon
                                                                • Nock
                                                                • Vere
                                                                • Azimuth
                                                                • Cryptography
                                                                • Arvo

                                                                  • Overview
                                                                  • Reference

                                                                    • Cryptography
                                                                    • Filesystem Hierarchy
                                                                    • Ames

                                                                      • Overview
                                                                      • Cryptography
                                                                      • API Reference
                                                                      • Behn

                                                                        • Overview
                                                                        • API Reference
                                                                        • Clay

                                                                          • Overview
                                                                          • Architecture
                                                                          • Using Clay
                                                                          • Data Types
                                                                          • Scry Reference
                                                                          • API Reference
                                                                          • Examples
                                                                          • Dill

                                                                            • Overview
                                                                            • API Reference
                                                                            • Eyre

                                                                              • Overview
                                                                              • External API Reference
                                                                              • Internal API Reference
                                                                              • Scry Reference
                                                                              • Data Types
                                                                              • Examples
                                                                              • Ford

                                                                                • Overview
                                                                                • Gall

                                                                                  • Overview
                                                                                  • Iris

                                                                                    • API Reference
                                                                                    • Jael

                                                                                      • API Reference
                                                                                      • Concepts

                                                                                        • Subscriptions
                                                                                        • Tutorials

                                                                                          • Move Trace
                                                                                        • Userspace

                                                                                          • Overview
                                                                                          • Gall

                                                                                            • Overview
                                                                                            • Tutorial
                                                                                            • API Reference
                                                                                            • Graph Store

                                                                                              • Graph Store Overview
                                                                                              • Data Structure Overview
                                                                                              • Validator Walkthrough
                                                                                              • Advanced Info
                                                                                              • Threads

                                                                                                • Overview
                                                                                                • HTTP API
                                                                                                • Reference
                                                                                                • Basics

                                                                                                  • Fundamentals
                                                                                                  • Bind
                                                                                                  • Input
                                                                                                  • Output
                                                                                                  • Summary
                                                                                                  • Gall

                                                                                                    • Start Thread
                                                                                                    • Take Result
                                                                                                    • Take Facts
                                                                                                    • Stop Thread
                                                                                                    • Poke Thread
                                                                                                    • Examples

                                                                                                      • Fetch JSON
                                                                                                      • Child Thread
                                                                                                      • Main-loop
                                                                                                      • Poke Agent
                                                                                                      • Scry
                                                                                                      • Take Fact
                                                                                                    • Landscape

                                                                                                      • Overview
                                                                                                      • API Reference

                                                                                                        • Graph Store
                                                                                                    • Hoon

                                                                                                      • Overview
                                                                                                      • Hoon School

                                                                                                        • 1.1 Setup
                                                                                                        • 1.1.1 Walkthrough: List of Numbers
                                                                                                        • 1.2 Nouns
                                                                                                        • 1.3 Hoon Syntax
                                                                                                        • 1.3.1 Walkthrough: Conditionals
                                                                                                        • 1.4 Gates (Hoon Functions)
                                                                                                        • 1.4.1 Walkthrough: Recursion
                                                                                                        • 1.5 Lists
                                                                                                        • 1.5.1 Walkthrough: Fibonacci Sequence
                                                                                                        • 1.6 The Subject and Its Legs
                                                                                                        • 1.6.1 Walkthrough: Ackermann Function
                                                                                                        • 1.7 Arms and Cores
                                                                                                        • 1.7.1 Walkthrough: Caesar Cipher
                                                                                                        • 1.8 Doors
                                                                                                        • 1.8.1 Bank Account
                                                                                                        • 1.9 Generators
                                                                                                        • 2.1 Atoms, Auras, and Simple Cell Types
                                                                                                        • 2.2 Type Checking and Type Inference
                                                                                                        • 2.3 Structures and Complex Types
                                                                                                        • 2.3.1 Walkthrough: Libraries
                                                                                                        • 2.3.2 Molds
                                                                                                        • 2.4 Standard Library: Trees, Sets, and Maps
                                                                                                        • 2.5 Type Polymorphism
                                                                                                        • 2.5.1 Walkthrough: Iron Polymorphism and Wet Polymorphism
                                                                                                        • 2.5.2 Walkthrough: Lead Polymorphism
                                                                                                        • 2.6 Behn
                                                                                                        • 2.7 Gall
                                                                                                        • 2.7.1 Gall Walkthrough: Egg Timer
                                                                                                        • Guides

                                                                                                          • CLI apps
                                                                                                          • Parsing
                                                                                                          • Writing Aqua Tests
                                                                                                          • Reference

                                                                                                            • Cheat Sheet
                                                                                                            • Irregular forms
                                                                                                            • Hoon Errors
                                                                                                            • Hoon Style Guide
                                                                                                            • Basic Types
                                                                                                            • Advanced Types
                                                                                                            • Auras
                                                                                                            • Runes

                                                                                                              • Atoms and strings
                                                                                                              • Nock . ('dot')
                                                                                                              • Wild ! ('zap')
                                                                                                              • Change Subject = ('tis')
                                                                                                              • Conditionals ? ('wut')
                                                                                                              • Cores | ('bar')
                                                                                                              • Arms + ('lus')
                                                                                                              • Cells : ('col')
                                                                                                              • Calls % ('cen')
                                                                                                              • Casts ^ ('ket')
                                                                                                              • Structures $ ('buc')
                                                                                                              • Make ; ('mic')
                                                                                                              • Hints ~ ('sig')
                                                                                                              • Terminators -- and ==
                                                                                                              • Limbs and wings

                                                                                                                • Limbs
                                                                                                                • Wings
                                                                                                                • Standard library

                                                                                                                  • Table of Contents
                                                                                                                  • 1a: Basic Arithmetic
                                                                                                                  • 1b: Tree Addressing
                                                                                                                  • 1c: Molds and Mold-Builders
                                                                                                                  • 2a: Unit Logic
                                                                                                                  • 2b: List Logic
                                                                                                                  • 2c: Bit Arithmetic
                                                                                                                  • 2d: Bit Logic
                                                                                                                  • 2e: Insecure Hashing
                                                                                                                  • 2f: Noun Ordering
                                                                                                                  • 2g: Unsigned Powers
                                                                                                                  • 2h: Set Logic
                                                                                                                  • 2i: Map Logic
                                                                                                                  • 2j: Jar and Jug Logic
                                                                                                                  • 2k: Queue Logic
                                                                                                                  • 2l: Container from Container
                                                                                                                  • 2m: Container from Noun
                                                                                                                  • 2n: Functional Hacks
                                                                                                                  • 2o: Normalizing Containers
                                                                                                                  • 2p: Serialization
                                                                                                                  • 2q: Molds and Mold-Builders
                                                                                                                  • 3a: Modular and Signed Ints
                                                                                                                  • 3b: Floating Point
                                                                                                                  • 3c: Urbit Time
                                                                                                                  • 3d: SHA Hash Family
                                                                                                                  • 3e: AES encryption (Removed)
                                                                                                                  • 3f: Scrambling
                                                                                                                  • 3g: Molds and Mold-Builders
                                                                                                                  • 4a: Exotic Bases
                                                                                                                  • 4b: Text Processing
                                                                                                                  • 4c: Tank Printer
                                                                                                                  • 4d: Parsing (Tracing)
                                                                                                                  • 4e: Parsing (Combinators)
                                                                                                                  • 4f: Parsing (Rule-Builders)
                                                                                                                  • 4g: Parsing (Outside Caller)
                                                                                                                  • 4h: Parsing (ASCII Glyphs)
                                                                                                                  • 4i: Parsing (Useful Idioms)
                                                                                                                  • 4j: Parsing (Bases and Base Digits)
                                                                                                                  • 4k: Atom Printing
                                                                                                                  • 4l: Atom Parsing
                                                                                                                  • 4m: Formatting Functions
                                                                                                                  • 4n: Virtualization
                                                                                                                  • 4o: Molds
                                                                                                                  • 5a: Compiler Utilities
                                                                                                                  • 5b: Macro Expansion
                                                                                                                  • 5c: Compiler Backend & Prettyprinter
                                                                                                                  • 5d: Parser
                                                                                                                  • 5e: Caching Compiler
                                                                                                                  • 5f: Molds and Mold-Builders
                                                                                                                  • 5g: profiling support
                                                                                                              • Nock

                                                                                                                • Nock Definition
                                                                                                                • Explanation
                                                                                                                • Example
                                                                                                                • Implementations
                                                                                                                • Vere

                                                                                                                  • C Runtime System
                                                                                                                  • Land of Nouns
                                                                                                                  • API overview by prefix
                                                                                                                  • C in Urbit
                                                                                                                  • Writing Jets
                                                                                                                  • Cryptography
                                                                                                                  • Azimuth

                                                                                                                    • Overview
                                                                                                                    • Life and Rift
                                                                                                                    • Advanced Azimuth Tools
                                                                                                                    • Glossary

                                                                                                                      • Ames
                                                                                                                      • Aqua
                                                                                                                      • Arm
                                                                                                                      • Arvo
                                                                                                                      • Atom
                                                                                                                      • Azimuth
                                                                                                                      • Battery
                                                                                                                      • Behn
                                                                                                                      • Breach
                                                                                                                      • Bridge
                                                                                                                      • Censures
                                                                                                                      • Ceremony
                                                                                                                      • chat
                                                                                                                      • Claims
                                                                                                                      • Clay
                                                                                                                      • Comet
                                                                                                                      • Core
                                                                                                                      • Delegated Sending
                                                                                                                      • Desk
                                                                                                                      • Dill
                                                                                                                      • Document Proposal
                                                                                                                      • Dojo
                                                                                                                      • Door
                                                                                                                      • Ecliptic
                                                                                                                      • Event Log
                                                                                                                      • Eyre
                                                                                                                      • Ford
                                                                                                                      • Galaxy
                                                                                                                      • Gall
                                                                                                                      • Gate
                                                                                                                      • HD Wallet
                                                                                                                      • Hoon
                                                                                                                      • Invite Tree
                                                                                                                      • Iris
                                                                                                                      • Jael
                                                                                                                      • Jaque
                                                                                                                      • Keyfile
                                                                                                                      • Landscape
                                                                                                                      • Mark
                                                                                                                      • Moon
                                                                                                                      • Nock
                                                                                                                      • Noun
                                                                                                                      • OTA Updates
                                                                                                                      • Payload
                                                                                                                      • pH
                                                                                                                      • Pier
                                                                                                                      • Pill
                                                                                                                      • Planet
                                                                                                                      • Proxies
                                                                                                                      • Replay
                                                                                                                      • Sail/Udon
                                                                                                                      • Senate
                                                                                                                      • Ship
                                                                                                                      • ship.arvo.network
                                                                                                                      • Star
                                                                                                                      • |sync
                                                                                                                      • Trap
                                                                                                                      • Upgrade Proposal
                                                                                                                      • Vane
                                                                                                                      • Vere
                                                                                                                      • Voting
                                                                                                                      • Wallet-Generator
                                                                                                                      Urbit/Documentation/Hoon/Reference/Standard library

                                                                                                                      4e: Parsing (Combinators)

                                                                                                                      ++bend

                                                                                                                      Conditional composer

                                                                                                                      Parsing composer: connects the ++edge vex with the subsequent ++rule sab as an optional suffix, using gate raq to compose or reject its result. If there is no suffix, or if the suffix fails to be composed with the current result, the current result is produced. Used to map a group of rules to a specified output.

                                                                                                                      Accepts

                                                                                                                      raq is a gate.

                                                                                                                      sab is a rule.

                                                                                                                      vex is an edge.

                                                                                                                      Produces

                                                                                                                      A ++rule.

                                                                                                                      Source

                                                                                                                      ++  bend                                                ::  conditional comp
                                                                                                                            ~/  %bend
                                                                                                                            |*  raq/_|*({a/* b/*} [~ u=[a b]])
                                                                                                                            ~/  %fun
                                                                                                                            |*  {vex/edge sab/rule}
                                                                                                                            ?~  q.vex
                                                                                                                              vex
                                                                                                                            =+  yit=(sab q.u.q.vex)
                                                                                                                            =+  yur=(last p.vex p.yit)
                                                                                                                            ?~  q.yit
                                                                                                                              [p=yur q=q.vex]
                                                                                                                            =+  vux=(raq p.u.q.vex p.u.q.yit)
                                                                                                                            ?~  vux
                                                                                                                              [p=yur q=q.vex]
                                                                                                                            [p=yur q=[~ u=[p=u.vux q=q.u.q.yit]]]
                                                                                                                          ::
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (;~((bend |=([a/char b/char] ?.(=(a b) ~ (some +(a))))) prn prn) [1 1] "qs")
                                                                                                                          [p=[p=1 q=3] q=[~ u=[p=~~q q=[p=[p=1 q=2] q="s"]]]]
                                                                                                                      
                                                                                                                          > (;~((bend |=([a/char b/char] ?.(=(a b) ~ (some +(a))))) prn prn) [1 1] "qqq")
                                                                                                                          [p=[p=1 q=3] q=[~ u=[p=~~r q=[p=[p=1 q=3] q="q"]]]]
                                                                                                                      
                                                                                                                          > (scan "aa" ;~((bend |=([a/char b/char] ?.(=(a b) ~ (some +(a))))) prn prn))
                                                                                                                          ~~b
                                                                                                                      
                                                                                                                          > (scan "ba" ;~((bend |=([a/char b/char] ?.(=(a b) ~ (some +(a))))) prn prn))
                                                                                                                          ! {1 3}
                                                                                                                          ! exit
                                                                                                                      
                                                                                                                          > `(unit @tas)`(scan "" ;~((bend) (easy ~) sym))
                                                                                                                          ~
                                                                                                                      
                                                                                                                          > `(unit @tas)`(scan "sep" ;~((bend) (easy ~) sym))
                                                                                                                          [~ %sep]

                                                                                                                      ++comp

                                                                                                                      Arbitrary compose

                                                                                                                      Parsing composer: connects the ++edge vex with a following ++rule sab, combining the contents of vex with the result of sab using a binary gate raq. Used to fold over the results of several ++rules.

                                                                                                                      Accepts

                                                                                                                      raq is a gate that accepts a cell of two nouns, a and b, and produces a cell of two nouns.

                                                                                                                      sab is a rule.

                                                                                                                      vex is an edge.

                                                                                                                      Produces

                                                                                                                      A ++rule.

                                                                                                                      Source

                                                                                                                      ++  comp
                                                                                                                            ~/  %comp
                                                                                                                            |*  raq/_|*({a/* b/*} [a b])                       ::  arbitrary compose
                                                                                                                            ~/  %fun
                                                                                                                            |*  {vex/edge sab/rule}
                                                                                                                            ~!  +<
                                                                                                                            ?~  q.vex
                                                                                                                              vex
                                                                                                                            =+  yit=(sab q.u.q.vex)
                                                                                                                            =+  yur=(last p.vex p.yit)
                                                                                                                            ?~  q.yit
                                                                                                                              [p=yur q=q.yit]
                                                                                                                            [p=yur q=[~ u=[p=(raq p.u.q.vex p.u.q.yit) q=q.u.q.yit]]]
                                                                                                                          ::
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (scan "123" ;~((comp |=([a/@u b/@u] (add a b))) dit dit dit))
                                                                                                                          6
                                                                                                                          > (scan "12" ;~((comp |=([a/@u b/@u] (add a b))) dit dit dit))
                                                                                                                          ! {1 3}
                                                                                                                          ! exit

                                                                                                                      ++fail

                                                                                                                      Never parse

                                                                                                                      Produces an ++edge at the same text position (++hair) with a failing result (q=~).

                                                                                                                      Accepts

                                                                                                                      tub is a ++nail.

                                                                                                                      Produces

                                                                                                                      An ++edge.

                                                                                                                      Source

                                                                                                                      ++  fail  |=(tub/nail [p=p.tub q=~])                    ::  never parse
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (fail [[1 1] "abc"])
                                                                                                                          [p=[p=1 q=1] q=~]
                                                                                                                      
                                                                                                                          > (fail [[p=1.337 q=70] "Parse me, please?"])
                                                                                                                          [p=[p=1.337 q=70] q=~]

                                                                                                                      ++glue

                                                                                                                      Skip delimiter

                                                                                                                      Parsing composer: connects an ++edge vex with a following ++rule sab by parsing the ++rule bus (the delimiting symbol) and throwing out the result.

                                                                                                                      Accepts

                                                                                                                      bus is a ++rule.

                                                                                                                      sab is a ++rule.

                                                                                                                      vex is an ++edge.

                                                                                                                      Produces

                                                                                                                      Source

                                                                                                                      ++  glue                                                ::  add rule
                                                                                                                            ~/  %glue
                                                                                                                            |*  bus/rule
                                                                                                                            ~/  %fun
                                                                                                                            |*  {vex/edge sab/rule}
                                                                                                                            (plug vex ;~(pfix bus sab))
                                                                                                                          ::
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (scan "200|mal|bon" ;~((glue bar) dem sym sym))
                                                                                                                          [q=200 7.102.829 7.237.474]
                                                                                                                      
                                                                                                                          > `[@u @tas @tas]`(scan "200|mal|bon" ;~((glue bar) dem sym sym))
                                                                                                                          [200 %mal %bon]
                                                                                                                      
                                                                                                                          >  (scan "200|;|bon" ;~((glue bar) dem sem sym))
                                                                                                                          [q=200 ~~~3b. 7.237.474]
                                                                                                                      
                                                                                                                          >  (scan "200.;.bon" ;~((glue dot) dem sem sym))
                                                                                                                          [q=200 ~~~3b. 7.237.474]

                                                                                                                      ++less

                                                                                                                      Parse unless

                                                                                                                      Parsing composer: if an ++edge vex reflects a success, fail. Otherwise, connect vex with the following ++rule.

                                                                                                                      Accepts

                                                                                                                      sab is a ++rule.

                                                                                                                      vex is an ++edge.

                                                                                                                      Produces

                                                                                                                      Source

                                                                                                                      ++  less                                                ::  no first and second
                                                                                                                            |*  {vex/edge sab/rule}
                                                                                                                            ?~  q.vex
                                                                                                                              =+  roq=(sab)
                                                                                                                              [p=(last p.vex p.roq) q=q.roq]
                                                                                                                            (fail +<.sab)
                                                                                                                          ::
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (scan "sas-/lo" (star ;~(less lus bar prn)))
                                                                                                                          "sas-/lo"
                                                                                                                      
                                                                                                                          > (scan "sas-/l+o" (star ;~(less lus bar prn)))
                                                                                                                          ! {1 8}
                                                                                                                          ! exit
                                                                                                                      
                                                                                                                          > (scan "sas|-/lo" (star ;~(less lus bar prn)))
                                                                                                                          ! {1 5}
                                                                                                                          ! exit

                                                                                                                      ++pfix

                                                                                                                      Discard first rule

                                                                                                                      Parsing composer: connects an ++edge vex with two subsequent ++rules, ignoring the result of the first and producing the result of the second.

                                                                                                                      Accepts

                                                                                                                      vex is an edge.

                                                                                                                      Produces

                                                                                                                      Source

                                                                                                                      ++  pfix                                                ::  discard first rule
                                                                                                                            ~/  %pfix
                                                                                                                            (comp |*({a/* b/*} b))
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > `@t`(scan "%him" ;~(pfix cen sym))
                                                                                                                          'him'
                                                                                                                      
                                                                                                                          > (scan "+++10" ;~(pfix (star lus) dem))
                                                                                                                          q=10

                                                                                                                      ++plug

                                                                                                                      Parse to tuple

                                                                                                                      Parsing composer: connects an ++edge vex with a following ++rule sab, producing a cell of both the results. See also: the monad applicator ;~ for a more detailed explanation.

                                                                                                                      Accepts

                                                                                                                      sab is a ++rule.

                                                                                                                      vex is an ++edge.

                                                                                                                      Produces

                                                                                                                      Source

                                                                                                                      ++  plug                                                ::  first then second
                                                                                                                            ~/  %plug
                                                                                                                            |*  {vex/edge sab/rule}
                                                                                                                            ?~  q.vex
                                                                                                                              vex
                                                                                                                            =+  yit=(sab q.u.q.vex)
                                                                                                                            =+  yur=(last p.vex p.yit)
                                                                                                                            ?~  q.yit
                                                                                                                              [p=yur q=q.yit]
                                                                                                                            [p=yur q=[~ u=[p=[p.u.q.vex p.u.q.yit] q=q.u.q.yit]]]
                                                                                                                          ::
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (scan "1..20" ;~(plug dem dot dot dem))
                                                                                                                          [q=1 ~~~. ~~~. q=20]
                                                                                                                      
                                                                                                                          > (scan "moke/~2014.1.1" ;~(plug sym fas nuck:so))
                                                                                                                          [1.701.539.693 ~~~2f. [% p=[p=~.da q=170.141.184.500.766.106.671.844.917.172.921.958.400]]]
                                                                                                                      
                                                                                                                          > ;;(,[@tas @t ~ %da @da] (scan "moke/~2014.1.1" ;~(plug sym fas nuck:so)))
                                                                                                                          [%moke '/' ~ %da ~2014.1.1]

                                                                                                                      ++pose

                                                                                                                      Parse options

                                                                                                                      Parsing composer: if vex reflects a failure, connect it with the following rule sab. See also: the monad applicator ;~

                                                                                                                      Accepts

                                                                                                                      sab is a ++rule.

                                                                                                                      vex is an ++edge.

                                                                                                                      Produces

                                                                                                                      Source

                                                                                                                      ++  pose                                                ::  first or second
                                                                                                                            ~/  %pose
                                                                                                                            |*  {vex/edge sab/rule}
                                                                                                                            ?~  q.vex
                                                                                                                              =+  roq=(sab)
                                                                                                                              [p=(last p.vex p.roq) q=q.roq]
                                                                                                                            vex
                                                                                                                          ::
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > `@t`(scan "+" ;~(pose lus tar cen))
                                                                                                                          '+'
                                                                                                                      
                                                                                                                          > `@t`(scan "*" ;~(pose lus tar cen))
                                                                                                                          '*'
                                                                                                                      
                                                                                                                          > `@t`(scan "%" ;~(pose lus tar cen))
                                                                                                                          '%'
                                                                                                                      
                                                                                                                          > `@t`(scan "-" ;~(pose lus tar cen))
                                                                                                                          ! {1 1}
                                                                                                                          ! exit

                                                                                                                      ++sfix

                                                                                                                      Discard second rule

                                                                                                                      Parsing composer: connects ++edges vex with two subsequent ++rules returning the result of the first and discarding the result of the second.

                                                                                                                      Accepts

                                                                                                                      a is the result of parsing the first ++rule.

                                                                                                                      b is the result of of parsing the second ++rule.

                                                                                                                      Produces

                                                                                                                      Source

                                                                                                                      ++  sfix                                                ::  discard second rule
                                                                                                                            ~/  %sfix
                                                                                                                            (comp |*({a/* b/*} a))
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > `@t`(scan "him%" ;~(sfix sym cen))
                                                                                                                          'him'
                                                                                                                      
                                                                                                                          > (scan "10+++" ;~(sfix dem (star lus)))
                                                                                                                          q=10

                                                                                                                      ++simu

                                                                                                                      First and second

                                                                                                                      Parsing composer: if an ++edge vex reflects a failure, fail. Otherwise, connect vex with the following ++rule.

                                                                                                                      Accepts

                                                                                                                      sab is a ++rule.

                                                                                                                      vex is an ++edge.

                                                                                                                      Produces

                                                                                                                      Source

                                                                                                                      ++  simu                                                ::  first and second
                                                                                                                            |*  {vex/edge sab/rule}
                                                                                                                            ?~  q.vex
                                                                                                                              vex
                                                                                                                            =+  roq=(sab)
                                                                                                                            roq
                                                                                                                          ::
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (scan "~zod" scat:vast)
                                                                                                                          [%dtzy p=%p q=0]
                                                                                                                      
                                                                                                                          > (scan "%zod" scat:vast)
                                                                                                                          [%dtzz p=%tas q=6.582.138]
                                                                                                                      
                                                                                                                          > (scan "%zod" ;~(simu cen scat:vast))
                                                                                                                          [%dtzz p=%tas q=6.582.138]
                                                                                                                      
                                                                                                                          > (scan "~zod" ;~(simu cen scat:vast))
                                                                                                                          ! {1 1}
                                                                                                                          ! exit

                                                                                                                      <-

                                                                                                                      4d: Parsing (Tracing)

                                                                                                                      4f: Parsing (Rule-Builders)

                                                                                                                      ->