2017-07-01 15 views
1

私はエルムの初心者です。これはスタイルについての質問であり、何かがどのように機能するかではありません。例えばなぜ `Html a`の代わりに` Html msg`を書くのが慣用的なのですか?

http://elm-lang.org/examples/formに私たちは、私はviewValidation modelはタイプHtml Msgの値と同じリスト内で共存できるように、これが行われている知っている

viewValidation : Model -> Html msg

を持っています。しかし、ここでmsgは型変数に過ぎないので、より伝統的なものを使用しないでくださいa

msgは、どんな追加情報を伝えることを意図していますか?

答えて

2

Elmアーキテクチャは、その意味を伝えるために、ModelMsgのようなタイプの一貫した命名を推奨します。小文字のmsgを使用すると、意図が何であるかが少し明確になります。

これは非常によくaと命名されている可能性がありますが、それは間違いなく多くの情報を伝えることは間違いありません。

編集

は、もう少し手の込んだelm-lang/htmlパッケージのドキュメントを検討します。

はのはHtml.programの定義を見てみましょう:

program : 
    { init : (model, Cmd msg) 
    , update : msg -> model -> (model, Cmd msg) 
    , subscriptions : model -> Sub msg 
    , view : model -> Html msg 
    } -> Program Never model msg 

The Elm ArchitectureはあなたのModelMsgタイプは状態を運ぶとアクションが何であるかを示すために、フレームワークで使用される方法の非常に明確な意図を概説します実行されます。ドキュメントを通じて常に小文字のmsgmodelを使用することで、どこに行くのかを理解するのがはるかに簡単になります。

は、型パラメータは、多くの場合、aで始まる省略されているよりHaskellesqueアプローチの代替を考えてみましょう:

program : 
    { init : (a, Cmd b) 
    , update : b -> a -> (a, Cmd b) 
    , subscriptions : a -> Sub b 
    , view : a -> Html b 
    } -> Program Never a b 

その定義は、すべてのビットとして有効ですが、私はそれがほとんどのように説明としてではないことを主張するだろうMsgModelのタイプについての強いヒントを提供するprogramのドキュメント。

+0

ありがとうございました!余分な情報がどのように伝えられているのかをもっと明白に表現できますか? –

+0

私は上記の答えを、ドキュメントの例を使ってもう少し詳細に更新しました。 –

+0

ああ、そうだ。だから 'msg'は「これはおそらくあなたのプログラムで定義されている' Msg'型の値でなければなりません」という意味です。 'Msg'がユーザによって定義されず、むしろこのライブラリからインポートされた場合、そのタイプは' Html msg'ではなく 'Html Msg'になります。それは公正な要約だと思いますか? –

関連する問題