λE = Lambda (λ) + Erlang VM.
Hamler is a completely different language from Elixir, though they are both compiled to beam bytecode and running on Erlang VM.
-
Elixir is a dynamically-typed functional programming language. Hamler is a strongly-typed functional language with type checking at compile-time.
-
Elixir has Ruby-like syntax, and the community mainly comes from Ruby On Rails. Hamler has Haskell and ML-style syntax, the core development team comes from Erlang and Haskell communities.
-
The design of Hamler compiler is also different from Elixir. Hamler source code is compiled to CoreErlang, while Elixir code is compiled to Erlang AST.
Purerl is a backend of PureScript language, which translates PureScript to Erlang source code.
The Hamler compiler v0.1 is forked from PureScript v0.13.6. PureScript's Eco-system is mostly tailored for Javascript and NodeJS which is too limited for Erlang/OTP ecosystem if we just make Hamler a backend of PureScript.
We introduced many Erlang data types as primary types, such as Erlang atoms, binaries, tuples, lists and maps. And at the same time, we have to modify the whole frontend (CST, AST, CoreFn and CodeGen) of PureScript to support expressions/syntax sugar from Erlang/OTP, such as binary match, list comprehensions, map pattern match...
Hamler is strictly evaluated, compiled to beam bytecode and running on Erlang VM, though it has the Haskell-style syntax.
1.5 How does hot code reloading work with static types, if the data types change between reloads? What's the upgrade story?
The strongly-typed Hamler source code is compiled to dynamic CoreErlang finally. So, we think the hot-upgrade feature of Erlang should still work.
2.1 Is the compiler forked from PureScript project?
Yes. Forked from PureScript 0.13.6
Not yet. Coming soon.
IDE support, such as Vim, Emacs and VSCode, is still at the planning stage.
Is Hamler used by EMQ X project in any product already?
No. Hamler v0.1 is far from being used in product applications. We are planning to introduce Hamler 1.0 in EMQ X v7.0 release.