Hacker News new | past | comments | ask | show | jobs | submit login
Hackett – A Haskell-like language with support for Racket’s macro system (github.com/lexi-lambda)
171 points by tosh on April 14, 2018 | hide | past | favorite | 16 comments



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


Yeah. I have always been amazed by the Haskell crowd's dislike of macros. Proper macro systems are incredibly useful, even in a language like Haskell.


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.


What are the problems with Template Haskell?


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.


Also Template Haskell is not supported by all Haskell implementations (eg: Reflex on mobile).


This article might be a useful introduction to what this is about: https://lexi-lambda.github.io/blog/2017/05/27/realizing-hack...


In addition, Lexi Lambda has done a number of talks that are on Youtube. I watched one such talk at RacketCon this past year.



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.


> "compiler as a conversation"

could you elaborate on this concept?


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.

[0]https://news.ycombinator.com/item?id=9397489


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!


When a language designer takes their project seriously: http://docs.racket-lang.org/hackett/index.html


Alexis is one of the smartest programmers I have ever worked with. Really cool to see your project front page!




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: