"Typing Haskell in Haskell" makes the implementation of type systems concrete for programmers; recent developments in type theory have much to offer but are not developed to this depth even in theory. Row types are particularly juicy because one does not lose type inference; we can use the exact same unification approach and need not resort to ordered contexts or focalization.
One common oversight in Haskell compilers is failing to intern identifiers
using Ints and failing to prefer IntMaps and IntSets. The PureScript compiler,
for instance, uses Maps as of writing.
Monads for effects are familiar to the Haskell programmer; they were introduced by Wadler's "Monads for functional programming" and are the accepted way to work with side effects in a lazy language.
When writing a compiler, one typically annotates the syntax tree in various phases. What the nodes are annotated with will vary over the course of the program; one might add type information during a type synthesis phase.
I have seen "strict data structures, lazy functions" bandied about among Haskellers. This is bad advice. Preferable is "know what you are doing."
prev | next