10Hoon is a strict, typed functional language which compiles itself
11to [Nock](../../nock), a combinator interpreter whose spec fits
14Hoon's design goal is to support higher-order typed functional
15programming without category theory, formal logic, or other
16interesting math. The reasoning: (a) a programming language is a
17user interface for programmers; (b) most programmers are not very
20Hoon is not quite as expressive as Haskell, though fairly close.
21But good Hoon style isn't good Haskell style. Hoon encourages
22coders to use higher-order programming as little as possible --
23again, simply for UI reasons. For example, multiple arguments
24are curried by default in Haskell and tupled by default in Hoon.
25The Hoon style has been described as "procedural programming in
26a functional language."
28Hoon is objectively simple: its complexity is bounded by the size
29of the compiler, about 3000 lines of Hoon. This is split evenly
30between frontend (parsing and macro expansion) and backend (code
31generation and type inference).
33Compared to most languages, Hoon has a heavier front end (more
34complex syntax) and a lighter back end (less complex semantics).
35This ratio reflects the belief that our brains are better than
36everyone thinks at learning languages (symbols and/or grammars),
37and worse at learning abstractions (proofs and/or algorithms).
38At first glance, Hoon may look gnarly (though its squiggles are
39more structured than most ASCII-heavy languages). But under the
40hood, there's much less complexity than you might expect.
42Keeping the Hoon-to-Nock mapping simple and transparent is a
43priority. In a sense, Hoon is to Haskell as C is to Pascal.
44There is no opaque high-level abstraction of Hoon's semantics;
45the language is what the compiler does. This design only works
46when the compilation process is trivial or nearly so.
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