This series is designed to teach you Hoon without assuming you have an extensive programming background. In fact, you should be able to follow much of it even if you have no programming experience at all, though of course experience helps. We strongly encourage you to try out all the examples of each lesson. These lessons are meant for the beginner but they aren't meant to be skimmed. Each lesson falls into one of two categories: readings, which are prose-heavy explanations of Hoon fundamentals, and walkthroughs, which are line-by-line explanations of example programs. Walkthroughs are found between readings, offering a practical implementation of the concepts taught in the reading before.
Before you start, we recommend reading Why Hoon?, a blog post by a Tlon engineer that justifies the existence and use of this peculiar language. This explainer gives useful context to all types of learners, but those new to programming will need to use Google frequently for the jargon.
Chapter 1 introduces and explains the fundamental concepts you need in order to understand Hoon's semantics.
Hoon is a "subject-oriented" programming language -- every expression of Hoon is evaluated relative to a subject. The subject is a piece of data that represents the environment, or the context, of an expression. After reading Chapter 1 you should understand what the subject is and how to refer to its various parts. In this chapter you'll also learn about cores, which are an important data structure in Hoon. Once you get the hang of cores you'll be able to write your own functions in Hoon.
Chapter 2 covers the type system, and writing apps, and the workings of the Arvo kernel.
- 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
- 2.7.2 Gall: Async Monad
- 2.8 Ford
- 2.8.1 Unit Testing with Ford
- 2.9.1 Walkthrough: Landscape Tile
- Writing Aqua Tests
- Appendix: Hoon Style Guide