Elm
https://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Elm_logo.svg/1200px-Elm_logo.svg.png
抽象化を犠牲にしてシンプルなコードを書くことを大事にしてる
中途半端な状態でもコンパイルエラーがなければ実行時エラーは起きない
HTML, CSS, JSを生成
play groundもある
ググるといろいろ出てくるが結局公式が一番新しい
Elmはバージョンが上がると結構いろいろ変わるっぽいのですぐ情報が古くなる
discord
elm-formatというのがある
サイト名の通り。
HTMLとElmに変換する
本
日本語版
バージョンが古い
scrapbox
elmコマンド
$ elm init
コンパイル
わからん、うまく行ったり行かなかったり
$ elm make hoge.elm
$ elm make hoge.elm --output=main.html
出力先ファイル名を決める場合
packageの導入
$ elm install elm-lang/html
repl
$ elm repl
haskellの:tみたいなことがしたい
関数や値をそのまま実行すると型注釈が得られる
elm reactor
$ elm reactor
.elmをすぐさまコンパイルしブラウザに表示してくる
SPAのやつにしてるからか
サーバーサイドをElmで書く
HaskellでElmコードを生成する
メモ
React, Reduxの上でElm使うことできるらしいmrsekut.icon
ReactNatveでも使えるらしい
管理画面などのようなSEOや速度を気にしないツールを作るのが得意
なんで?
ベスプラ
Elm is wrong
パッケージの依存関係直すやつ
Debug
devtoolのconsoleに表示される
updateのmsgのところに挟むとか
code:elm
case Debug.log "msg" msg of
CSS
extensible record
これ使うとスッキリ書けるらしい
なにを?
レコードの更新
破壊的な変更はしない
nullやundefinedはない
再帰的なレコードの定義はできない
code:elm
r = {x=3, y=2} -- 束縛。以降値は変化しない
xOver10 {x} = x > 10
xOver10 r -- False
newR = { r | x = 100 } -- r.xを更新して返す
xOver10 newR -- True
リファクタ
Elmが「ランタイムエラーがない」っていうのは、実行時の検査を最小に抑え、静的検査を頑張ってるって意味か?
でも境界値チェックとかしないやろ?Haskellとかと同じなんじゃないのか
なんで、「Elmだから」を強調してこういうことを言っているのかわからん
Storeが一つだと複数人開発するとコンフリクト起こりやすくない?
乱数の仕組み
Subscritionの意味
どのぐらいの規模でカスタムコンポーネント的なやつに分けるんだろう
一度に複数のMsg関数を実行したければどうする?
まとめたMsgを更に定義する?
ex. cを実行したらupdateの内部でa,bを呼ぶ
今は2つを同時に呼びたくて、どちらも引数なし
Haskellならdo式の中で書いてる感じ
こう?まじ?
だめだ。これでは1のほうが動かない
code:elm
onClick (Msg1 |> (\_ -> Msg2))