Write type-safe Elixir code using Elm's syntax and tooling, leveraging the BEAM ecosystem.
Elchemy is a compiler that allows developers to write Elixir code using Elm's statically-typed, functional syntax. It translates Elm-like source files into idiomatic Elixir, providing type safety and reducing runtime errors while leveraging the BEAM ecosystem. The project aims to combine the best of both languages—Elm's reliability and Elixir's tooling and platform.
Elixir developers seeking stronger type safety and Elm developers wanting to use the BEAM ecosystem. It's ideal for teams building reliable, maintainable applications where compile-time error prevention is a priority.
Developers choose Elchemy for its seamless integration of Elm's type system with Elixir's ecosystem, offering type-safe interop, readable output, and a familiar syntax. It uniquely bridges two functional programming communities, providing safety without sacrificing access to Elixir's libraries and tooling.
Write Elixir code using statically-typed Elm-like syntax (compatible with Elm tooling)
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Elchemy's compiler provides extensive type inference, reducing manual annotations and catching errors early, as highlighted in the features section.
It enables type-safe calls to Elixir/Erlang functions using typespecs, minimizing boilerplate and maintaining safety, as described in the interop details.
The type system eliminates almost all runtime errors in Elchemy code, isolating issues to Elixir interop parts, ensuring higher reliability.
Generates idiomatic and performant Elixir code that is easy to read and analyze without referencing the source, aiding in maintenance and debugging.
Elchemy-effects is only 20% complete, meaning you can't write code with side effects yet, severely limiting real-world applications like I/O or state management.
No support for Windows and heavy reliance on Unix tools, as mentioned in issues #287 and #288, restrict usability in diverse development environments.
Limited support for Elixir macros, including those with do..end blocks, hinders integration with macro-heavy libraries common in the Elixir ecosystem.