Notes
1Some say functional languages don’t have design patterns. I’d argue that those people are confusing the idea of design patterns with the particular design patterns applicable to object-oriented languages.↩
2In mathy terms, the truth statements can contain only constants, like 3+3 = 2×3. But because you’re a human and good at generalizing, you can read sets of such examples and infer universally-quantified facts like ∀y: y+y = 2×y.↩
3Well, I wrote Midje so I would say that, wouldn’t I?↩
4When a function calls itself as the very last action in a path through its code, that’s called tail-recursive. In many languages, the compiler automatically converts those calls into more efficient loops. Clojure doesn’t do that, which is why it has a special loop ... recur construct.↩
5As of Specter 0.11, Specter caches the results of predict-select-computation for you, so you’ll probably never call it (or, rather, Specter’s version comp-paths) in client code. ↩
6As Specter has evolved, even more performance tricks have been added. See the wiki for an overview.↩
7As Specter has evolved, even more performance tricks have been added. See the wiki for an overview.↩