It's really cool to see Racket being used like this! Its power really shines through:
> Due to the way Hackett is implemented, many things that are language features in Haskell can be derived concepts in Hackett. In fact, Hackett’s ADTs are not primitives, they are actually implemented as a library via the data and case macros
I don’t think Haskellers are against macros in general, but prefer Generic or GADT for tasks other languages might use macros for. Also Template Haskell sucks but we still have to use it sometimes which makes us bitter. I would welcome a hygenic, typed macro system like Hackett has.
I have found the sentiment to be more "we don't need macros, we have a proper type system/laziness/whatever".
I know enough Haskell to know that many of the macros I would use in scheme aren't necessary, but it is not like the good parts of compile time code generation are completely negated.
As an author of Template Haskell the expression trees you build are not constrained by types (other than Exp); you won't see a type error due to a problem in a Template Haskell function until you try to use that function in another module, and it produces Haskell code that in turn does not compile.
As a user of Template Haskell functions you will mostly complain about the slow compilation time, the jarring syntax, poor documentation (since so much of Haskell documentation relies on types) and the error messages when you do something wrong.
The more I learn about this project the more I like it.
It would be amazing to see Hackett implemented in miniKanren, I think that would really bring us a big step closer to "compiler as a conversation" sort of programming. The combination of relational evaluation and the Haskell type system should be really powerful.
It's not my idea, or a new idea. All the same I couldn't find a good reference. This [0] thread should give you an idea of what I'm talking about and hopefully someone else will come along with a better link.
Wow, just wow! I've read a lot of disbelief about how such a language would be impossible or at least practically too difficult to implement. I've been really keen to find exactly this!
> Due to the way Hackett is implemented, many things that are language features in Haskell can be derived concepts in Hackett. In fact, Hackett’s ADTs are not primitives, they are actually implemented as a library via the data and case macros