Urbit
  • Introduction
  • Development

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

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

        • Overview
        • Ames

          • Overview
          • Cryptography
          • API Reference
          • Scry Reference
          • Data Types
          • Behn

            • Overview
            • API Reference
            • Scry Reference
            • Examples
            • Clay

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

                • Overview
                • Writing Marks
                • Using Marks
                • Examples
              • Dill

                • Overview
                • API Reference
                • Scry Reference
                • Data Types
                • Eyre

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

                    • Overview
                    • Gall

                      • Overview
                      • API Reference
                      • Data Types
                      • Iris

                        • Overview
                        • API Reference
                        • Data Types
                        • Example
                        • Jael

                          • Overview
                          • API Reference
                          • Scry Reference
                          • Data Types
                          • Examples
                          • Concepts

                            • Scries
                            • Subscriptions
                            • Tutorials

                              • Move Trace
                              • Reference

                                • Cryptography
                                • Filesystem Hierarchy
                              • Userspace

                                • Overview
                                • HTTP API Guide
                                • Gall Guide

                                  • Introduction
                                  • 1. Arvo
                                  • 2. The Agent Core
                                  • 3. Imports and Aliases
                                  • 4. Lifecycle
                                  • 5. Cards
                                  • 6. Pokes
                                  • 7. Structures and Marks
                                  • 8. Subscriptions
                                  • 9. Vanes
                                  • 10. Scries
                                  • 11. Failure
                                  • 12. Next Steps
                                  • Appendix: Types
                                  • Full-Stack Walkthrough

                                    • 1. Introduction
                                    • 2. Types
                                    • 3. Agent
                                    • 4. JSON
                                    • 5. Marks
                                    • 6. Eyre
                                    • 7. React app setup
                                    • 8. React app logic
                                    • 9. Desk and glob
                                    • 10. Summary
                                    • Graph Store

                                      • Graph Store Overview
                                      • Data Structure Overview
                                      • Validator Walkthrough
                                      • Sample Application: Library
                                      • Graph Store - Reference
                                      • 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
                                            • Distribution

                                              • Overview
                                              • Guide
                                              • Docket File
                                              • Glob
                                              • Dojo Tools
                                            • Hoon

                                              • Overview
                                              • Hoon School

                                                • 1.1 Introduction
                                                • 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
                                                  • JSON
                                                  • Strings
                                                  • Sail (HTML)
                                                  • 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')
                                                      • Imports / ('fas')
                                                      • 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: Molds and mold builders
                                                          • 5f: Profiling support
                                                          • Zuse

                                                            • Table of Contents
                                                            • 2d(1-5): To JSON, Wains
                                                            • 2d(6): From JSON
                                                            • 2d(7): From JSON (unit)
                                                            • 2e(2-3): Print & Parse JSON
                                                        • 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
                                                              • Urbit HD Wallet
                                                              • Azimuth Data Flow
                                                              • Azimuth.eth
                                                              • Ecliptic.eth
                                                              • Advanced Azimuth Tools
                                                              • Life and Rift
                                                              • Layer 2

                                                                • Layer 2 Overview
                                                                • Layer 2 Actions
                                                                • Transaction Format
                                                                • Rollers
                                                                • Roller HTTP RPC-API
                                                                • Custom Roller Tutorial
                                                              • Glossary

                                                                • Ames
                                                                • Aqua
                                                                • Arm
                                                                • Arvo
                                                                • Atom
                                                                • Azimuth
                                                                • Battery
                                                                • Behn
                                                                • 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
                                                                • Factory Reset
                                                                • Naive rollups
                                                                • 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
                                                                      • Ames

                                                                        • Overview
                                                                        • Cryptography
                                                                        • API Reference
                                                                        • Scry Reference
                                                                        • Data Types
                                                                        • Behn

                                                                          • Overview
                                                                          • API Reference
                                                                          • Scry Reference
                                                                          • Examples
                                                                          • Clay

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

                                                                              • Overview
                                                                              • Writing Marks
                                                                              • Using Marks
                                                                              • Examples
                                                                            • Dill

                                                                              • Overview
                                                                              • API Reference
                                                                              • Scry Reference
                                                                              • Data Types
                                                                              • Eyre

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

                                                                                  • Overview
                                                                                  • Gall

                                                                                    • Overview
                                                                                    • API Reference
                                                                                    • Data Types
                                                                                    • Iris

                                                                                      • Overview
                                                                                      • API Reference
                                                                                      • Data Types
                                                                                      • Example
                                                                                      • Jael

                                                                                        • Overview
                                                                                        • API Reference
                                                                                        • Scry Reference
                                                                                        • Data Types
                                                                                        • Examples
                                                                                        • Concepts

                                                                                          • Scries
                                                                                          • Subscriptions
                                                                                          • Tutorials

                                                                                            • Move Trace
                                                                                            • Reference

                                                                                              • Cryptography
                                                                                              • Filesystem Hierarchy
                                                                                            • Userspace

                                                                                              • Overview
                                                                                              • HTTP API Guide
                                                                                              • Gall Guide

                                                                                                • Introduction
                                                                                                • 1. Arvo
                                                                                                • 2. The Agent Core
                                                                                                • 3. Imports and Aliases
                                                                                                • 4. Lifecycle
                                                                                                • 5. Cards
                                                                                                • 6. Pokes
                                                                                                • 7. Structures and Marks
                                                                                                • 8. Subscriptions
                                                                                                • 9. Vanes
                                                                                                • 10. Scries
                                                                                                • 11. Failure
                                                                                                • 12. Next Steps
                                                                                                • Appendix: Types
                                                                                                • Full-Stack Walkthrough

                                                                                                  • 1. Introduction
                                                                                                  • 2. Types
                                                                                                  • 3. Agent
                                                                                                  • 4. JSON
                                                                                                  • 5. Marks
                                                                                                  • 6. Eyre
                                                                                                  • 7. React app setup
                                                                                                  • 8. React app logic
                                                                                                  • 9. Desk and glob
                                                                                                  • 10. Summary
                                                                                                  • Graph Store

                                                                                                    • Graph Store Overview
                                                                                                    • Data Structure Overview
                                                                                                    • Validator Walkthrough
                                                                                                    • Sample Application: Library
                                                                                                    • Graph Store - Reference
                                                                                                    • 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
                                                                                                          • Distribution

                                                                                                            • Overview
                                                                                                            • Guide
                                                                                                            • Docket File
                                                                                                            • Glob
                                                                                                            • Dojo Tools
                                                                                                          • Hoon

                                                                                                            • Overview
                                                                                                            • Hoon School

                                                                                                              • 1.1 Introduction
                                                                                                              • 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
                                                                                                                • JSON
                                                                                                                • Strings
                                                                                                                • Sail (HTML)
                                                                                                                • 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')
                                                                                                                    • Imports / ('fas')
                                                                                                                    • 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: Molds and mold builders
                                                                                                                        • 5f: Profiling support
                                                                                                                        • Zuse

                                                                                                                          • Table of Contents
                                                                                                                          • 2d(1-5): To JSON, Wains
                                                                                                                          • 2d(6): From JSON
                                                                                                                          • 2d(7): From JSON (unit)
                                                                                                                          • 2e(2-3): Print & Parse JSON
                                                                                                                      • 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
                                                                                                                            • Urbit HD Wallet
                                                                                                                            • Azimuth Data Flow
                                                                                                                            • Azimuth.eth
                                                                                                                            • Ecliptic.eth
                                                                                                                            • Advanced Azimuth Tools
                                                                                                                            • Life and Rift
                                                                                                                            • Layer 2

                                                                                                                              • Layer 2 Overview
                                                                                                                              • Layer 2 Actions
                                                                                                                              • Transaction Format
                                                                                                                              • Rollers
                                                                                                                              • Roller HTTP RPC-API
                                                                                                                              • Custom Roller Tutorial
                                                                                                                            • Glossary

                                                                                                                              • Ames
                                                                                                                              • Aqua
                                                                                                                              • Arm
                                                                                                                              • Arvo
                                                                                                                              • Atom
                                                                                                                              • Azimuth
                                                                                                                              • Battery
                                                                                                                              • Behn
                                                                                                                              • 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
                                                                                                                              • Factory Reset
                                                                                                                              • Naive rollups
                                                                                                                              • 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
                                                                                                                                ~/  %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=113 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=114 q=[p=[p=1 q=3] q="q"]]]]
                                                                                                                              
                                                                                                                              > `@t`(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}
                                                                                                                              syntax error
                                                                                                                              
                                                                                                                              > `(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.

                                                                                                                              vex is an edge.

                                                                                                                              sab is a rule.

                                                                                                                              Produces

                                                                                                                              A rule.

                                                                                                                              Source

                                                                                                                              ++  comp
                                                                                                                                ~/  %comp
                                                                                                                                =+  raq=|*([a=* b=*] [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.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=@ud b=@ud] (add a b))) dit dit dit))
                                                                                                                              6
                                                                                                                              
                                                                                                                              > (scan "12" ;~((comp |=([a=@ud b=@ud] (add a b))) dit dit dit))
                                                                                                                              {1 3}
                                                                                                                              syntax error

                                                                                                                              ++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=~])
                                                                                                                              

                                                                                                                              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.

                                                                                                                              vex is an edge.

                                                                                                                              sab is a rule.

                                                                                                                              Produces

                                                                                                                              A rule.

                                                                                                                              Source

                                                                                                                              ++  glue
                                                                                                                                ~/  %glue
                                                                                                                                |*  bus=rule
                                                                                                                                ~/  %fun
                                                                                                                                |*  [vex=edge sab=rule]
                                                                                                                                (plug vex ;~(pfix bus sab))
                                                                                                                              

                                                                                                                              Examples

                                                                                                                              > `[@ud @tas @tas]`(scan "200|mal|bon" ;~((glue bar) dem sym sym))
                                                                                                                              [200 %mal %bon]
                                                                                                                              
                                                                                                                              > `[@ud @t @tas]`(scan "200|;|bon" ;~((glue bar) dem mic sym))
                                                                                                                              [200 ';' %bon]

                                                                                                                              ++less

                                                                                                                              Parse unless

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

                                                                                                                              Accepts

                                                                                                                              vex is an edge.

                                                                                                                              sab is a rule.

                                                                                                                              Produces

                                                                                                                              An edge.

                                                                                                                              Source

                                                                                                                              ++  less
                                                                                                                                |*  [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.

                                                                                                                              sab is a rule.

                                                                                                                              Produces

                                                                                                                              An edge.

                                                                                                                              Source

                                                                                                                              ++  pfix
                                                                                                                                ~/  %pfix
                                                                                                                                |*  sam=[vex=edge sab=rule]
                                                                                                                                %.  sam
                                                                                                                                (comp |*([a=* b=*] b))
                                                                                                                              

                                                                                                                              Examples

                                                                                                                              > `@t`(scan "%him" ;~(pfix cen sym))
                                                                                                                              'him'
                                                                                                                              
                                                                                                                              > (scan "+++10" ;~(pfix (star lus) dem))
                                                                                                                              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

                                                                                                                              vex is an edge.

                                                                                                                              sab is a rule.

                                                                                                                              Produces

                                                                                                                              An edge.

                                                                                                                              Source

                                                                                                                              ++  plug
                                                                                                                                ~/  %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))
                                                                                                                              [1 '.' '.' 20]

                                                                                                                              ++pose

                                                                                                                              Parse options

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

                                                                                                                              Accepts

                                                                                                                              vex is an edge.

                                                                                                                              sab is a rule.

                                                                                                                              Produces

                                                                                                                              An edge.

                                                                                                                              Source

                                                                                                                              ++  pose
                                                                                                                                ~/  %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 edge vex with two subsequent rules returning the result of the first and discarding the result of the second.

                                                                                                                              Accepts

                                                                                                                              vex is an edge.

                                                                                                                              sab is a rule.

                                                                                                                              Produces

                                                                                                                              An edge.

                                                                                                                              Source

                                                                                                                              ++  sfix
                                                                                                                                ~/  %sfix
                                                                                                                                |*  sam=[vex=edge sab=rule]
                                                                                                                                %.  sam
                                                                                                                                (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

                                                                                                                              vex is an edge.

                                                                                                                              sab is a rule.

                                                                                                                              Produces

                                                                                                                              An edge.

                                                                                                                              Source

                                                                                                                              ++  simu
                                                                                                                                |*  [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)

                                                                                                                              ->

                                                                                                                              Edit this page on GitHub