Elixir Programming with
Type Checking
=====
@matsubara0507
昨年...
型システムを入れるという話があった
しかし、まだない
Elchemy
Elchemy
Elm => Elixir のトランスパイラ
2017年2月に first commit
両者のいいとこどり
Elm
純粋関数型・静的型付けな AltJS
Haskellに似た構文(中身はかなり違う)
The Elm Architecuture の DSL
例: 総和を求める関数
Elchemy です
module Hello exposing (..)
sum : List Int -> Int
sum list =
case list of
first :: rest ->
first + sum rest
[] ->
0
例: 総和を求める関数
Elixir です
defmodule Hello do
use Elchemy
@spec sum(list(integer)) :: integer
curry sum/1
def sum(list) do
case list do
[first | rest] ->
(first + sum(rest))
[] ->
0
end
end
end
試すには
オンラインエディタがある
重いけど
リアルタイムビルドされる
自前でビルド
Docker Image つくりました
Haskell製の CLI と TravisCI を使って自動追従
FAQ
既存の Elixir ライブラリは使えるか?
任意のモジュールの任意の関数を FFI できる
しかし任意のマクロは扱えない
任意の Elixir コードを Elchemy コードに書ける
既存の Elm ライブラリは使えるか?
Native モジュール・Port・Elm ランタイムを使
わない限りは可能
FAQ
型はどう表されるか
値コンストラクタはスネークケースのアトムと
して,コンストラクタの引数はタプルで表す
例: MyType 42 "Forty two" Error という値は
{:my_type, 42, "Forty two", :error} となる
ToDo アプリ作ってみた
Phoenix を利用
フロントを Elm
matsubara0507/elchemy_todo_app · GitLab
GitLab なのはモノは試しってことです
感想
うれしみ
静的検査は神
フロントとコードを共有できる
つらみ
Phoenix のいくつかは型付けできない
ルーティングの引数
へテロリストのようなモノ
コンパイルが遅い
結論
おまけ
マージされた
おしまい

Elixir Programming with Type checking