2017-06-08 18 views
1

エルムでは、コンストラクタが1つしかないユニオンタイプを使用してレコードタイプを定義することがあります。私はその後、レコードフィールドを解凍するためのケースステートメントを1つだけ使用します。単一コンストラクタのユニオンタイプの使用

type Model = 
    Model { stack: List Int } 

update msg model = 
    case model of 
     Model { stack } -> 
      ... 

これを解凍する方法はありますか?シングルケースのケースは馬鹿げているようです。不要なインデントと冗長表示が発生します。

も:私はいくつかのフィールドを持っているし、プログラムにのみいくつかの場所で使用する傾向があるプログラム(に中央のデータ構造を扱う際に、より明確にするためにtype代わりのtype aliasを使用して、その余分なよ冗長ではないその多くの問題)。可能であれば、このアプローチをあきらめ、レコードの型名を使用する方が良いでしょうか?

+0

以下のチャドノートでは、型コンストラクタでのモデルのラッピングは特に必要ありません。アプリを書く人よりもライブラリの作家の方が一般的です –

答えて

4

あなたは関数のシグネチャ自体のパターン一致させることができます:

update msg (Model model) = 
    model.stack ... 

か、あなたが直接stackを使用する場合:あなたはこのタイプを行うべきかどうかについては

update msg (Model { stack }) = 
    ... 

をものの?私はこれまで、モデルから実装の詳細を隠すよう明示的に試みるときにこのメソッドを使用しました。必然的に導入される余計な冗長さに対処するだけで十分です。それが本当に必要かどうかは、あなた次第です。明示的な必要がなければ、私はおそらくそれを避けるために傾けるだろう。

関連する問題