Awesome
Awesome Elm PLTD
Useful resources for programming language theory & development in Elm.
Elm is a statically typed, pure, functional programming language for creating Web applications. Why use Elm for PL development then? Maybe you're more familiar with Elm, or you want your language to be available anywhere JavaScript is, or maybe you don't want to learn about monads and burritos.
Whatever the reason, there are at least a few of us playing with PL development in Elm so why not have an awesome list to show off that work?
Come join the #language-implementation
channel on the Elm slack for more discussion!
About This List
Over the last year or so I've noticed a number of projects and discussions pop up on the Elm slack and discourse around programming language development in Elm. Some are toy or learning projects, while others are more serious endeavours like Stabel or funkLang. The ephemeral nature of Slack chat means a lot of information gets lost over time and we traditionally haven't had a place to organise or consolodate that knowledge.
Hopefully this list can rectify that! At the moment this list is a largely uncurated collection of PL-related projects in Elm with the intention that we have a starting point for sharing, learning, and discussion. In time, this list will become more heavily curated to show off the best or most interesting examples of PL dev in Elm.
Contents
Languages
Compilers
- elm-in-elm - Elm compiler written in Elm
- ren - Cleaner, clearer JavaScript. A functional scripting language for the Web.
- funkLang - funkLang is a Visual FrontEnd Framework where you can design, develop and deploy complex web applications using both visual and code workflows.
- squarepants - Squarepants is a programming language aimed at interactive applications.
- guida - functional programming language that builds upon the solid foundation of Elm, offering backward compatibility with all existing Elm 0.19.1 projects (based on a transpilation of Elm's Haskell source code to Elm)
Interpreters
- schelme - A minimal scheme-esque language written in Elm.
- elm-eexl - Elm Expression Language: Simple context-based expression parser and evaluator.
- microkanren - An Elm implementation of the μKanren language.
- lisa - A Lisp dialect designed for coding workshops
- ulmus - Ulmus is a Lisp implementation made with Elm.
- elm-lisp - An experiment in writing
parse
andeval
for a typed Lisp in Elm. - elm-scheme - A Scheme implementation in Elm.
- leaf-lang - A multi-paradigm scripting language for Elm.
- elm-monkey-interpreter - A Monkey interpreter written in Elm.
Markup Languages
- elm-markup - Elm Markup is a markup language that integrates closely with Elm.
- L1 - A toy language demo for a fault-tolerant parser.
- CaYaTeX - CaYaTeX is an experimental markup language that compiles to LaTeX, Html, and (indirectly) PDF.
- LiaScript - Markdown for interactive Open Educational Resources (OER), with support for animations, text2speech, automated data analyzes & visualization, interactive coding, quizzes, ASCII-art and more ... It is also extendable due to an simple Macro-System.
Packages
Parsing
- elm/parser - A parsing library, focused on simplicity and great error messages.
- dmy/elm-pratt-parser - Pratt / Top-Down Operator Precedence parsing for
elm/parser
.
Code Generation
- the-sett/elm-pretty-printer - A pretty printing library based on 'A Prettier Printer' by Philip Wadler.
- the-sett/salix - Salix is a data modelling language that is designed to support code generation across many different situations.
- Janiczek/elm-sourcemap - A library for generating source maps (for use in browser step debuggers, handy for languages compiling to JavaScript).
Other
- Janiczek/transform - Transform recursive data structures from the bottom up.
Resources
Talks & Videos
- Fault-tolerant parsing and the L1 markup language. - Jim talks about Fault-tolerant parsing and the L1 markup language at the Elm Online Meetup on August 4th 2021.
- Implementing the lambda calculus in Elm. - Andrey talks about Implementing lambda calculus in Elm at the Elm Online Meetup on August 4th 2021.
Gists & Snippets
🚨 Note: These are snippets or short bits of code that are mostly presented without comment or explanation, but might still be handy to use, copy, or learn from. If you're the author of any of these snippets, or have used them in your own work, consider writing a blog post or publishing a package so we can add those to this list instead!