Elmは、ウェブブラウザベースのグラフィカルユーザインタフェースを宣言的に作成するためのドメイン固有プログラミング言語である。Elmは純粋関数型言語であり、ユーザビリティ・パフォーマンス・堅牢性を重視して開発されている。静的かつ強力な型検査によって「事実上一切の実行時例外が起こらない」ことを売りにしている。
歴史
Elmは2012年にEvan Czaplickiの修士論文として最初に設計された。最初のElmは多くのサンプルコードとそれらをブラウザで簡単に試すことの出来るオンラインエディタとともにリリースされた。Evan CzaplickiはElm開発のため2013年にPreziに入社、2016年からはオープンソースエンジニアとしてNoRedInkに所属し、同時にElmソフトウェア財団を立ち上げた。
最初の実装ではElmコンパイラはHTML・CSS・JavaScriptをターゲットとしていた。一連のツールはその後も拡張を続けており、現在はREPL、パッケージマネージャー、タイムトラベルデバッガー、MacとWindows向けのインストーラーを備えている。Elmはまたコミュニティ製ライブラリを提供するエコシステムを持っている。
特徴
Elmは小さいながらも表現力豊かな言語の構成要素(if式、let式、case式、匿名関数)を持っている。さらに、不変性、静的型付け、HTML・CSS・JavaScriptとの相互運用性を主要な機能として持っている。
不変性
Elmのすべての値はイミュータブルであり、一度作られた値に対して後から変更が加えることはできない。
Elmは永続データ構造を用いてArray・Dict・Setライブラリを実装している。
静的型
Elmは静的型付けである。すべての定義にはその値を正確に表現する型注釈をつけることができる。型には以下が含まれる。
- 整数や文字列などのプリミティブ型
- リストやタプル・拡張レコードなどの基本的なデータ構造
- タグ付きユニオンと呼ばれるカスタム型
Elm は完全な型推論をもサポートしており、コンパイラは型注釈なしに型安全かどうかを判定できる。
モジュールシステム
Elmはモジュールシステムを持っており、ユーザーはコードをモジュールと呼ばれる小さな単位に分割することができる。ユーザーは値をインポート・エクスポートすることができ、実装の詳細を他のプログラマが意識する必要のないように隠蔽することができる。モジュールはElmコミュニティライブラリの基礎になっている。
HTML、CSS、JavaScriptとの相互運用
Elmはポートと呼ばれる抽象を用いてJavaScriptと協調することができる。これによってElmとJavaScriptの間でデータのやりとりが可能になる。
Elmはelm/htmlというライブラリによってElmの内部でHTMLやCSSを扱うことができる。これはVirtual DOMを使って効率的に更新を行う。
制限
HaskellやPureScriptと違い、Elmは型クラスをサポートしていないため、多くの共通的な処理を抽象化することはできない。たとえば、map、apply、fold、あるいはfilterといった汎用的な関数はない。代わりに、List.map Dict.map のように、それぞれのモジュール名でプレフィックスをつけて使う。
ツール
- オンラインエディタ(簡単な確認用) elm-lang.org/try
- ローカルへのインストール Install Elm
- 学習用リソースとサンプル集
- コアライブラリとコミュニティライブラリ
サンプルコード
脚注
外部リンク
- 公式ウェブサイト


![elmelmlive [サルでもわかるWEBプログラミング]](https://i-doctor.sakura.ne.jp/web/lib/exe/fetch.php?media=elm:pasted:20190602-032016.png)

