鍵入別名
有時我們想給型別一個更具描述性的名稱。假設我們的應用有一個代表使用者的資料型別:
{ name : String, age : Int, email : String }
我們對使用者的功能具有以下型別的型別簽名:
prettyPrintUser : { name : String, age : Int, email : String } -> String
對於使用者來說,這可能變得非常難以處理,因此讓我們使用型別別名來減小大小併為該資料結構提供更有意義的名稱:
type alias User =
{ name: String
, age : Int
, email : String
}
prettyPrintUser : User -> String
型別別名使得為應用程式定義和使用模型更加清晰:
type alias Model =
{ count : Int
, lastEditMade : Time
}
使用 type alias
字面上只是使用你給它的名稱別名。使用上面的 Model
型別與使用 { count : Int, lastEditMade : Time }
完全相同。這是一個示例,顯示別名與底層型別沒有區別:
type alias Bugatti = Int
type alias Fugazi = Int
unstoppableForceImmovableObject : Bugatti -> Fugazi -> Int
unstoppableForceImmovableObject bug fug =
bug + fug
> unstoppableForceImmovableObject 09 87
96 : Int
記錄型別的型別別名定義建構函式,其中每個欄位按宣告順序具有一個引數。
type alias Point = { x : Int, y : Int }
Point 3 7
{ x = 3, y = 7 } : Point
type alias Person = { last : String, middle : String, first : String }
Person "McNameface" "M" "Namey"
{ last = "McNameface", middle = "M", first = "Namey" } : Person
即使對於相容型別,每個記錄型別別名也有自己的欄位順序。
type alias Person = { last : String, middle : String, first : String }
type alias Person2 = { first : String, last : String, middle : String }
Person2 "Theodore" "Roosevelt" "-"
{ first = "Theodore", last = "Roosevelt", middle = "-" } : Person2
a = [ Person "Last" "Middle" "First", Person2 "First" "Last" "Middle" ]
[{ last = "Last", middle = "Middle", first = "First" },{ first = "First", last = "Last", middle = "Middle" }] : List Person2