[英]Augmenting type aliases in elm or haskell
假設我有一個類型為elm(0.18),如下所示:
type alias CatSimple =
{ color : String
, age : Int
, name : String
, breed : String
}
我的項目要求我也有一個類型,其中包含前一個字段的所有字段,但還有一些其他字段:
type alias CatComplex =
{ color : String
, age : Int
, name : String
, breed : String
, feral : Bool
, spayed : Bool
}
現在讓我們說我需要向CatSimple
添加另一個字段。 我必須記得將它添加到CatComplex
中。
我希望能夠動態擴充我的類型,以便我可以避免更新所有類型,或不得不求助於這樣的事情:
type alias CatComplex =
{ simpleData: CatSimple
, feral : Bool
, spayed : Bool
}
在榆樹有沒有辦法做到這一點?
如果沒有,Haskell是否提供了這樣做的方法?
您可以在Elm中使用可擴展記錄來定義基本類型的字段組合:
type alias Cat c =
{ c
| color : String
, age : Int
, name : String
, breed : String
}
type alias FeralCat =
Cat
{ feral : Bool
, spayed : Bool
}
以下是如何使用它的示例:
feralCatSummary : FeralCat -> String
feralCatSummary { color, feral } =
color ++ "; Feral? " ++ toString feral
main : Html msg
main =
text <|
feralCatSummary
{ color = "Blue"
, age = 5
, name = "Billy"
, breed = "Bluecat"
, feral = True
, spayed = False
}
簡短的回答是否定的,但是你可以做一些你想要的方向:
有一種類型,但額外的信息'可選'
type alias Cat =
{ color : String
, age : Int
, name : String
, breed : String
, feral : Maybe Bool
, spayed : Maybe Bool
}
如果要將CatComplex傳遞給僅使用Cat字段的函數,可以定義類型
type alias CatGeneric a =
{ a|
color : String
, age : Int
, name : String
, breed : String
}
然后
fn : CatGeneric a -> Bool
....
如果你通過Cat或CatComplex,這應該輸入
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.