タイトルは煽りです申し訳ありません
要約
再掲
view : Element msg
view =
row [ width fill, height fill, spacing 16, explain Debug.todo ]
[ el [ centerX ] <| text "hello"
, el [ centerX ] <|text "world"
, el [ centerX ] <|text "🐐🐐🐐🐐🐐"
]
explain Debug.todo
をattributeに追加するとその要素と子要素にボーダーがついてUIデバッグするのに便利だよ
内容は以上です。以下あまり情報はないので気を付けてください
「elm-ui使ってdom見てみたらいっぱいdivがいるんですけど!」
elm-uiはHTMLとCSSの歴史を隠蔽し、平和と秩序をもたらしたUIフレームワークです。
といってもHTMLとCSSで構成されていることに変わりはないしelm-uiの気持ちを全て察することなどできません
そのうちなんかうまくいかなくてdevtool開いてdomの構造みることになります。しょうがない
elm-uiは書いてるElement
と実際のdomに差が出るので慣れないとどれが自分で書いたel
か、それとも暗黙的に生成されたものかわかりません。
ということで最初はexplain Debug.todo
しましょう!
使い方
row [ width fill, height fill, spacing 16, explain Debug.todo ]
[ text "hello"
, text "world"
]
explain Debug.todo
を見たい要素のattributesに追加するだけ。
「Debug.todoってどういうこと?どういう仕組み?」
枠線だすだけでなんでDebug.todo
なんて出てくるかというと、Debugモジュールを使っていると--optimize
つけてcompileできなくなるからなんです
つまりpublishやリリースビルド時にexplain
が混ざらないことが保証されています
仕組み
explainの型にはTodo -> Attribute msg
とあります
type alias Todo =
String -> Never
この型はDebug.todo
のaliasと書いてあります
todo : String -> a
todo =
Elm.Kernel.Debug.todo
この型変数a
はどの型にもなれます。だからtodo
は任意の位置に書けるわけですね
さて型Todo
ですがString -> Never
なのでString -> a
のtodo
で満たせますね。
このNever
ですが要するに値を生成できない型です。つまりString -> Never
という関数の実装は絶対に書けないわけですね。なのでexplain
の引数にはDebug.todo
しか置けないということになります
まとめ
explain Debug.todo
の説明をしましたがNever
の使い方すごくないですか。そう使うんだーって感じです
次は多分padding, spacingについて適当に書く気がします