Hackett is a high-level, general-purpose programming language designed for writing programs in many domains, and it is designed to scale nicely from small programs to large, complex systems. Its name is a portmanteau that hints at its philosophy and heritage:
Like Haskell, Hackett is a purely functional, statically typed, lazily evaluated programming language. It provides powerful, bidirectional type inference, algebraic datatypes, pattern matching, typeclasses, and higher-rank polymorphism.
Like Racket, Hackett is a Lisp with an expressive hygienic macro system for compile-time metaprogramming and language extension. It is built as a tower of macros, and very few things are truly “baked into” the language and cannot be changed.
Hackett not only combines features from both Haskell and Racket, it interleaves and synthesizes them to provide an even more powerful type system and even more powerful macros. Since the Hackett typechecker is actually a part of macroexpansion, macros both have access to type information and can influence the typechecking process.
This guide serves as a relatively gentle introduction to Hackett, and it assumes no prior experience with either Haskell or Racket. Familiarity with either language will, of course, help.