Urbit
  • Introduction
  • Development

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

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

        • Overview
        • Reference

          • Cryptography
          • Filesystem Hierarchy
          • Ames

            • Overview
            • Cryptography
            • API Reference
            • Behn

              • Overview
              • API Reference
              • Clay

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

                  • Overview
                  • API Reference
                  • Eyre

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

                      • Overview
                      • Gall

                        • Overview
                        • Iris

                          • API Reference
                          • Jael

                            • API Reference
                            • Concepts

                              • Subscriptions
                              • Tutorials

                                • Move Trace
                              • Userspace

                                • Overview
                                • Gall

                                  • Overview
                                  • Tutorial
                                  • API Reference
                                  • Graph Store

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

                                      • Overview
                                      • HTTP API
                                      • Reference
                                      • Basics

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

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

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

                                            • Overview
                                            • API Reference

                                              • Graph Store
                                          • Hoon

                                            • Overview
                                            • Hoon School

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

                                                • CLI apps
                                                • Parsing
                                                • Writing Aqua Tests
                                                • Reference

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

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

                                                      • Limbs
                                                      • Wings
                                                      • Standard library

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

                                                      • Nock Definition
                                                      • Explanation
                                                      • Example
                                                      • Implementations
                                                      • Vere

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

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

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

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

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

                                                                  • Overview
                                                                  • Reference

                                                                    • Cryptography
                                                                    • Filesystem Hierarchy
                                                                    • Ames

                                                                      • Overview
                                                                      • Cryptography
                                                                      • API Reference
                                                                      • Behn

                                                                        • Overview
                                                                        • API Reference
                                                                        • Clay

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

                                                                            • Overview
                                                                            • API Reference
                                                                            • Eyre

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

                                                                                • Overview
                                                                                • Gall

                                                                                  • Overview
                                                                                  • Iris

                                                                                    • API Reference
                                                                                    • Jael

                                                                                      • API Reference
                                                                                      • Concepts

                                                                                        • Subscriptions
                                                                                        • Tutorials

                                                                                          • Move Trace
                                                                                        • Userspace

                                                                                          • Overview
                                                                                          • Gall

                                                                                            • Overview
                                                                                            • Tutorial
                                                                                            • API Reference
                                                                                            • Graph Store

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

                                                                                                • Overview
                                                                                                • HTTP API
                                                                                                • Reference
                                                                                                • Basics

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

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

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

                                                                                                      • Overview
                                                                                                      • API Reference

                                                                                                        • Graph Store
                                                                                                    • Hoon

                                                                                                      • Overview
                                                                                                      • Hoon School

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

                                                                                                          • CLI apps
                                                                                                          • Parsing
                                                                                                          • Writing Aqua Tests
                                                                                                          • Reference

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

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

                                                                                                                • Limbs
                                                                                                                • Wings
                                                                                                                • Standard library

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

                                                                                                                • Nock Definition
                                                                                                                • Explanation
                                                                                                                • Example
                                                                                                                • Implementations
                                                                                                                • Vere

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

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

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

                                                                                                                      2a: Unit Logic

                                                                                                                      ++biff

                                                                                                                      Unit as argument

                                                                                                                      Applies a function b that produces a unit to the unwrapped value of unit a (u.a). If a is empty, ~ is produced.

                                                                                                                      Accepts

                                                                                                                      a is a unit.

                                                                                                                      b is a function that accepts a noun and produces a unit.

                                                                                                                      Produces

                                                                                                                      A unit.

                                                                                                                      Source

                                                                                                                      ++  biff
                                                                                                                            |*  [a=(unit) b=$-(* (unit))]
                                                                                                                            ?~  a  ~
                                                                                                                            (b u.a)
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (biff (some 5) |=(a=@ (some (add a 2))))
                                                                                                                          [~ u=7]
                                                                                                                      
                                                                                                                          > (biff ~ |=(a=@ (some (add a 2))))
                                                                                                                          ~

                                                                                                                      ++bind

                                                                                                                      Non-unit function to unit, producing unit

                                                                                                                      Applies a function b to the value (u.a) of a unit a, producing a unit. Used when you want a function that does not accept or produce a unit to both accept and produce a unit.

                                                                                                                      Accepts

                                                                                                                      a is a unit.

                                                                                                                      b is a function.

                                                                                                                      Produces

                                                                                                                      A unit.

                                                                                                                      Source

                                                                                                                      ++  bind
                                                                                                                            |*  [a=(unit) b=gate]
                                                                                                                            ?~  a  ~
                                                                                                                            [~ u=(b u.a)]
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (bind ((unit @) [~ 97]) ,@t)
                                                                                                                          [~ u='a']
                                                                                                                      
                                                                                                                          > =a |=(a=@ (add a 1))
                                                                                                                          > (bind ((unit @) [~ 2]) a)
                                                                                                                          [~ u=3]

                                                                                                                      ++bond

                                                                                                                      Replace null

                                                                                                                      Replaces an empty unit b with the product of a called trap a. If the unit is not empty, then the original unit is produced.

                                                                                                                      Accepts

                                                                                                                      a is a trap.

                                                                                                                      b is a unit.

                                                                                                                      Produces

                                                                                                                      Either the product of a or the value inside of unit b.

                                                                                                                      Source

                                                                                                                      ++  bond
                                                                                                                            |*  a=(trap)
                                                                                                                            |*  b=(unit)
                                                                                                                            ?~  b  $:a
                                                                                                                            u.b
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (bex 10)
                                                                                                                          1.024
                                                                                                                          > ((bond |.((bex 10))) ~)
                                                                                                                          1.024
                                                                                                                      
                                                                                                                          > ((bond |.((bex 10))) (slaw %ud '123'))
                                                                                                                          123

                                                                                                                      ++both

                                                                                                                      Group unit values into pair

                                                                                                                      Produces ~ if either a or b are empty. Otherwise, produces a unit whose value is a cell of the values of two input units a and b.

                                                                                                                      Accepts

                                                                                                                      a is a unit.

                                                                                                                      b is a unit.

                                                                                                                      Produces

                                                                                                                      A unit of the two initial values.

                                                                                                                      Source

                                                                                                                      ++  both
                                                                                                                            |*  [a=(unit) b=(unit)]
                                                                                                                            ?~  a  ~
                                                                                                                            ?~  b  ~
                                                                                                                            [~ u=[u.a u.b]]
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (both (some 1) (some %b))
                                                                                                                          [~ u=[1 %b]]
                                                                                                                      
                                                                                                                          > (both ~ (some %b))
                                                                                                                          ~

                                                                                                                      ++clap

                                                                                                                      Apply function to two units

                                                                                                                      Applies a binary function c--which does not usually accept or produce a unit-- to the values of two units, a and b, producing a unit.

                                                                                                                      Accepts

                                                                                                                      a is a unit.

                                                                                                                      b is a unit.

                                                                                                                      c is a function that performs a binary operation.

                                                                                                                      Produces

                                                                                                                      A unit.

                                                                                                                      Source

                                                                                                                      ++  clap                                                ::  combine
                                                                                                                            |*  [a=(unit) b=(unit) c=_|=(^ +<-)]
                                                                                                                            ?~  a  b
                                                                                                                            ?~  b  a
                                                                                                                            [~ u=(c u.a u.b)]
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > =u ((unit @t) [~ 'a'])
                                                                                                                          > =v ((unit @t) [~ 'b'])
                                                                                                                          > (clap u v |=([a=@t b=@t] (welp (trip a) (trip b))))
                                                                                                                          [~ u="ab"]
                                                                                                                      
                                                                                                                          > =a ((unit @u) [~ 1])
                                                                                                                          > =b ((unit @u) [~ 2])
                                                                                                                          > =c |=([a=@ b=@] (add a b))
                                                                                                                      
                                                                                                                          > (clap a b c)
                                                                                                                          [~ 3]

                                                                                                                      ++drop

                                                                                                                      Unit to list

                                                                                                                      Makes a ++list of the unwrapped value (u.a) of a unit a.

                                                                                                                      Accepts

                                                                                                                      a is a unit.

                                                                                                                      Produces

                                                                                                                      A list.

                                                                                                                      Source

                                                                                                                      ++  drop                                                ::  enlist
                                                                                                                            |*  a=(unit)
                                                                                                                            ?~  a  ~
                                                                                                                            [i=u.a t=~]
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > =a ((unit @) [~ 97])
                                                                                                                          > (drop a)
                                                                                                                          [i=97 t=~]
                                                                                                                      
                                                                                                                          > =a ((unit @) [~])
                                                                                                                          > (drop a)
                                                                                                                          ~

                                                                                                                      ++fall

                                                                                                                      Give unit a default value

                                                                                                                      Produces a default value b for a unit a in cases where a is null.

                                                                                                                      Accepts

                                                                                                                      a is a unit.

                                                                                                                      b is a noun that's used as the default value.

                                                                                                                      Produces

                                                                                                                      Either a noun b or the unwrapped value of unit a.

                                                                                                                      Source

                                                                                                                      ++  fall                                                ::  default
                                                                                                                            |*  [a=(unit) b=*]
                                                                                                                            ?~(a b u.a)
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (fall ~ 'a')
                                                                                                                          'a'
                                                                                                                          > (fall [~ u=0] 'a')
                                                                                                                          0

                                                                                                                      ++lift

                                                                                                                      Curried bind

                                                                                                                      Accepts a ++gate a and produces a function that accepts unit b to which it applies a. Used when you want a function that does not accept or produce a unit to both accept and produce a unit.

                                                                                                                      Accepts

                                                                                                                      a is a gate.

                                                                                                                      b is a unit.

                                                                                                                      Produces

                                                                                                                      A unit.

                                                                                                                      Source

                                                                                                                      ++  lift                                                ::  lift gate (fmap)
                                                                                                                            |*  a=gate                                            ::  flipped
                                                                                                                            |*  b=(unit)                                          ::  curried
                                                                                                                            (bind b a)                                            ::  bind
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > ((lift dec) `(unit @)`~)
                                                                                                                          ~
                                                                                                                      
                                                                                                                          > ((lift dec) `(unit @)`[~ 20])
                                                                                                                          [~ 19]

                                                                                                                      ++mate

                                                                                                                      Choose

                                                                                                                      Accepts two units a and b whose values are expected to be equivalent. If either is empty, then the value of the other is produced. If neither are empty, it asserts that both values are the same and produces that value. If the assertion fails, ++mate crashes with 'mate' in the stack trace.

                                                                                                                      Accepts

                                                                                                                      a is a unit.

                                                                                                                      b is a unit.

                                                                                                                      Produces

                                                                                                                      A unit or crash.

                                                                                                                      Source

                                                                                                                      ++  mate                                                ::  choose
                                                                                                                            |*  [a=(unit) b=(unit)]
                                                                                                                            ?~  b  a
                                                                                                                            ?~  a  b
                                                                                                                            ?.(=(u.a u.b) ~|('mate' !!) a)
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > =a ((unit @) [~ 97])
                                                                                                                          > =b ((unit @) [~ 97])
                                                                                                                          > (mate a b)
                                                                                                                          [~ 97]
                                                                                                                      
                                                                                                                          > =a ((unit @) [~ 97])
                                                                                                                          > =b ((unit @) [~])
                                                                                                                          > (mate a b)
                                                                                                                          [~ 97]
                                                                                                                      
                                                                                                                          > =a ((unit @) [~ 97])
                                                                                                                          > =b ((unit @) [~ 98])
                                                                                                                          > (mate a b)
                                                                                                                          ! 'mate'
                                                                                                                          ! exit

                                                                                                                      ++need

                                                                                                                      Unwrap unit

                                                                                                                      Retrieve the value from a unit and crash if the unit is null.

                                                                                                                      Accepts

                                                                                                                      a is a unit.

                                                                                                                      Produces

                                                                                                                      Either the unwrapped value of a (u.a), or crash.

                                                                                                                      Source

                                                                                                                      ++  need                                                ::  demand
                                                                                                                            |*  a=(unit)
                                                                                                                            ?~  a  ~|(%need !!)
                                                                                                                            u.a
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > =a ((unit [@t @t]) [~ ['a' 'b']])
                                                                                                                          > (need a)
                                                                                                                          ['a' 'b']
                                                                                                                      
                                                                                                                          > =a ((unit @ud) [~ 17])
                                                                                                                          > (need a)
                                                                                                                          17
                                                                                                                      
                                                                                                                          > =a ((unit @) [~])
                                                                                                                          > (need a)
                                                                                                                          ! exit

                                                                                                                      ++some

                                                                                                                      Wrap value in a unit

                                                                                                                      Takes any noun a and produces a unit with the value set to a.

                                                                                                                      Accepts

                                                                                                                      a is a noun.

                                                                                                                      Produces

                                                                                                                      A unit.

                                                                                                                      Source

                                                                                                                      ++  some                                                ::  lift (pure)
                                                                                                                            |*  a=*
                                                                                                                            [~ u=a]
                                                                                                                      

                                                                                                                      Examples

                                                                                                                          > (some ['a' 'b'])
                                                                                                                          [~ u=['a' 'b']]
                                                                                                                      
                                                                                                                          > (some &)
                                                                                                                          [~ u=%.y]

                                                                                                                      <-

                                                                                                                      1c: Molds and Mold-Builders

                                                                                                                      2b: List Logic

                                                                                                                      ->