SlideShare a Scribd company logo
1 of 16
Download to read offline
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 のいくつかは型付けできない
ルーティングの引数
へテロリストのようなモノ
コンパイルが遅い
結論
おまけ
マージされた
おしまい

More Related Content

More from Nobutada Matsubara

More from Nobutada Matsubara (19)

MixML 作ってみる
MixML 作ってみるMixML 作ってみる
MixML 作ってみる
 
Elm でなんかつくる
Elm でなんかつくるElm でなんかつくる
Elm でなんかつくる
 
Haskell と Elm と JSON の話
Haskell と Elm と JSON の話Haskell と Elm と JSON の話
Haskell と Elm と JSON の話
 
ADVENTAR の Bot を作る with Haskell
ADVENTAR の Bot を作る with HaskellADVENTAR の Bot を作る with Haskell
ADVENTAR の Bot を作る with Haskell
 
Haskell Backpack 事始め
Haskell Backpack 事始めHaskell Backpack 事始め
Haskell Backpack 事始め
 
GitHub での Haskell の色が変わったんで
GitHub での Haskell の色が変わったんでGitHub での Haskell の色が変わったんで
GitHub での Haskell の色が変わったんで
 
日記って続かないよね...
日記って続かないよね...日記って続かないよね...
日記って続かないよね...
 
「7つの言語、7つの世界」を読む
「7つの言語、7つの世界」を読む「7つの言語、7つの世界」を読む
「7つの言語、7つの世界」を読む
 
Lisper はじめました (再)
Lisper はじめました (再)Lisper はじめました (再)
Lisper はじめました (再)
 
Haskell で LINE Bot を作ってみた
Haskell で LINE Bot を作ってみたHaskell で LINE Bot を作ってみた
Haskell で LINE Bot を作ってみた
 
Marp colors
Marp colorsMarp colors
Marp colors
 
Marp Tips
Marp TipsMarp Tips
Marp Tips
 
Whitespcae 入門
Whitespcae 入門Whitespcae 入門
Whitespcae 入門
 
入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !
 
SKIコンビネーターによる処理系の作成
SKIコンビネーターによる処理系の作成SKIコンビネーターによる処理系の作成
SKIコンビネーターによる処理系の作成
 
Ruby4Ctf
Ruby4CtfRuby4Ctf
Ruby4Ctf
 
Lisper はじめました(大嘘)
Lisper はじめました(大嘘)Lisper はじめました(大嘘)
Lisper はじめました(大嘘)
 
Xamarin はじめました
Xamarin はじめましたXamarin はじめました
Xamarin はじめました
 
Lisperはじめました
LisperはじめましたLisperはじめました
Lisperはじめました
 

Elixir Programming with Type checking