Show HN: My "weekend" project, an ML dialect and compiler
texodus.github.com
texodus.github.com
- Pattern matching is a sexy feature that is way needed in compile to JS languages
- Using an actual lambda character is way badass.
- Same goes for the inbuilt PhantomJS & Closure support
- I like these cute type definitions: (Num | String) -> String.
- Tail recursion f-yeah
- I agree with other poster about "hard to google". Not to be a "backseat brander", but something like forml has the ML in there as a shoutout as well as being easier to find.
- I like that even though you are compile-to-JS, you are not "of" JS. Pragmatic, yet forward-thinking.
Do you see take any hints/inspiration from other coffescript compilers (livescript, icedcoffeescript, contracts, etc.)? I do like how livescript has a standard prelude and you might want to consider that [edit: on closer read, just saw you do have a prelude. F-yeah again].
Also, does implementing lazy/infinite lists/functions seem possible to you or is that a giant undertaking? [edit: again on read another doc, just saw you do have infinite sequences, so congrats on the completeness of your language.]
Forml is an awesome name! Mind if I potentially steal this idea?
Excellent work!
Would you mind posting about how someone would go about getting from a "medium beginner" Haskell knowledge to implementing something like this?
[Write yourself a scheme in 48 hours](http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_H...) was very helpful for seeing a compile interpreter at a high level, [Typing Haskell in Haskell](http://web.cecs.pdx.edu/~mpj/thih/) was a fantastic resource for implementing DHM - the NYC Haskell community was fantasically helpful as well. Best way to learn anything in Haskell, or any language IMO, is to just start writing it :)
No current plans for any compiler level prototyping, but some of this could be accomplished via the existing type system - it would be nice to have some sort of record field unification/discrimination at the type level, to allow you to do something like `{ fields_1 } -> {fields_2 } -> { fields_1 && fields_2 }`, but I haven't thought this through entirely yet. Thanks for the feedback!