假设我有一个类型为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是否提供了这样做的方法?
答案 0 :(得分:7)
您可以在Elm中使用可扩展记录来定义一种基本的字段组合:
<?php
echo "Worked!";
?>
以下是如何使用它的示例:
type alias Cat c =
{ c
| color : String
, age : Int
, name : String
, breed : String
}
type alias FeralCat =
Cat
{ feral : Bool
, spayed : Bool
}
答案 1 :(得分:2)
简短的回答是否定的,但是你可以做一些你想要的方向:
只有一种类型,但额外的信息'可选'
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
,则应进行此类型检查