9Hoon is a strict, typed functional language which compiles itself
10to the Nock VM (whose spec fits on a T-shirt).
12Hoon's design goal is to support higher-order typed functional
13programming without category theory, formal logic, or other
14interesting math. The reasoning: (a) a programming language is a
15user interface for programmers; (b) most programmers are not very
16good at math. Hoon is not quite as expressive as Haskell, though
19Good Hoon style varies from good Haskell style. Hoon encourages
20coders to use higher-order programming as little as possible --
21again, simply for UI reasons. For example, multiple arguments
22are curried by default in Haskell and tupled by default in Hoon.
23The house style has been described as "procedural programming in
24a functional language." The power of Haskell, or close, is there
25when we really need it. But we try not to swat flies with it.
27Hoon is objectively simple: its complexity is bounded by the size
28of the compiler, about 3000 lines of Hoon. This is split about
29halfway half between frontend (parsing and macro expansion) and
30backend (code generation and type inference).
32This parser-heavy ratio reflects the belief that our brains are
33better than everyone thinks at learning languages (symbols and/or
34grammars), and worse at learning abstractions (proofs and/or
35algorithms). At first glance, Hoon may look gnarly (though its
36squiggles are more structured than most ASCII-heavy languages).
37But there's less than you might expect under the hood.
39(Hoon has simple principles and a lot of details. To keep the
40details from getting overwhelming, we start out learning a
41simplified subset called Core Hoon. Note that some of the
42internal structures we show are simplified to match the subset.
43These simplifications are corrected in the Advanced section.)
45Keeping the Hoon-to-Nock mapping straightforward is a priority.
46Very roughly, Hoon is to Haskell as C is to Pascal. Pascal tries
47to conceal its implementation beneath a layer of abstract
48concepts; C, an "advanced macro assembler," tries to provide a
49similar user experience with few abstract ideas as possible.
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list