1. Welcome to Claro!
  2. User Guide
  3. 1. Hello, World
  4. 2. Getting Started!
    1. 2.1. Understanding the Starter Project
    2. 2.2. Your First Program
    3. 2.3. Intro to Modules
  5. Reference Guide
  6. 3. Common Programming Concepts
    1. 3.1. Variables & Primitive Types
    2. 3.2. Separate Variable Declaration & Initialization
    3. 3.3. Variable Reassignment
    4. 3.4. String Formatting
    5. 3.5. Control Flow
      1. 3.5.1. If-Else
      2. 3.5.2. While
      3. 3.5.3. For
      4. 3.5.4. Repeat
      5. 3.5.5. Pipes
      6. 3.5.6. Pattern Matching
        1. 3.5.6.1. Matching Structured Data
        2. 3.5.6.2. Wildcard Patterns
        3. 3.5.6.3. Static Exhaustiveness Checks
      7. 3.5.7. Collection Comprehension
        1. 3.5.7.1. Comprehension is More Than Syntax Sugar
  7. 4. Types
    1. 4.1. Builtin Collections
      1. 4.1.1. Lists
      2. 4.1.2. Sets
      3. 4.1.3. Maps
      4. 4.1.4. Tuples
      5. 4.1.5. Structs
    2. 4.2. Oneofs
      1. 4.2.1. "Narrowing" / Type Guards
    3. 4.3. Atoms
    4. 4.4. Aliases
      1. 4.4.1. Aliases are Not a New Type Declaration
    5. 4.5. User Defined Types
      1. 4.5.1. Parameterized Types
        1. 4.5.1.1. Concrete Type Inference
      2. 4.5.2. Recursive Types
        1. 4.5.2.1. Impossible Recursive Types
  8. 5. Type Inference
    1. 5.1. Required Type Annotations
  9. 6. Procedures
    1. 6.1. Functions
    2. 6.2. Consumers
    3. 6.3. Providers
  10. 7. Lambdas & First Class Procedures
    1. 7.1. Lambdas are Restricted "Closures"
  11. 8. Error Handling
    1. 8.1. Error Propagation
  12. 9. Generics
    1. 9.1. Contracts
      1. 9.1.1. Implementing a Contract
      2. 9.1.2. Multiple Type Params
        1. 9.1.2.1. (Advanced) Implied Types
      3. 9.1.3. Dynamic Dispatch
    2. 9.2. Generic Return Type Inference
  13. 10. Copying Data
    1. 10.1. Mutability Coercion on Copy
    2. 10.2. Performance Optimizations
    3. 10.3. Known Copy Bugs
  14. 11. Resource Files
  15. 12. Module System
    1. 12.1. Module APIs
      1. 12.1.1. Procedure Signatures
      2. 12.1.2. Type & Alias Definitions
        1. 12.1.2.1. Initializers
        2. 12.1.2.2. Unwrappers
        3. 12.1.2.3. Opaque Types
      3. 12.1.3. Static Values
        1. 12.1.3.1. Flags
      4. 12.1.4. HTTP Services
    2. 12.2. Visibility
    3. 12.3. Swapping Dependencies
  16. 13. Concurrency
    1. 13.1. Graph Procedures
    2. 13.2. Graph Procedure Composition
    3. 13.3. Calling Graph Procedures
    4. 13.4. (Advanced) Conditional Subgraph Execution
  17. 14. Fearless Concurrency
    1. 14.1. Guaranteed Data-Race-Free Concurrency
    2. 14.2. Guaranteed Deadlock-Free Concurrency
      1. 14.2.1. Blocking Procedures
      2. 14.2.2. Re: "What Color is Your Function?"
      3. 14.2.3. (Advanced) Blocking Generics
  18. 15. Basic HTTP Servers
  19. 16. JSON Parsing
  20. 17. Build Time Metaprogramming
    1. 17.1. Source Code Templates
    2. 17.2. (Literal) Code Reuse
      1. 17.2.1. Reusing Module APIs
      2. 17.2.2. Reusing Source Code
      3. 17.2.3. Abstract Modules
  21. StdLib
  22. 18. Default Modules
    1. 18.1. booleans
    2. 18.2. deque
    3. 18.3. doubles
    4. 18.4. files
    5. 18.5. floats
    6. 18.6. futures
    7. 18.7. fp
    8. 18.8. ints
    9. 18.9. lists
    10. 18.10. longs
    11. 18.11. maps
    12. 18.12. math
    13. 18.13. priority_queue
    14. 18.14. random
    15. 18.15. scanner
    16. 18.16. sets
    17. 18.17. std
    18. 18.18. strings
    19. 18.19. string_builder

The Claro Programming Language (DRAFT)

Common Programming Concepts