Generics 如何在Elm中指定泛型类型命名?

Generics 如何在Elm中指定泛型类型命名?,generics,types,annotations,record,elm,Generics,Types,Annotations,Record,Elm,elm是否有“泛型”系统? 例如,我有一个函数saysetTime,它记录并将.date更改为当前时间。 现在,如果我有多个带有.date的记录,如何在多个不同的记录上使用相同的功能? 我尝试将签名设置为a->a,但随后出现了错误 Your type annotation uses type variable `a` which means ANY type of value can flow through, but your code is saying it specifically wa

elm是否有“泛型”系统? 例如,我有一个函数say
setTime
,它记录并将
.date
更改为当前时间。 现在,如果我有多个带有
.date
的记录,如何在多个不同的记录上使用相同的功能? 我尝试将签名设置为
a->a
,但随后出现了错误

Your type annotation uses type variable `a` which means ANY type of value
can flow through, but your code is saying it specifically wants a record. Maybe
change your type annotation to be more specific?
我可以让类型批注需要一个带有
.date
的记录吗?如果可以,怎么做?

您可以写:

setTime : Date -> { a | date : Date } -> { a | date : Date }
其中,
{a | data:Date}
表示a的任何值,其字段名为Date,其类型为
Date


如果您经常使用它,并且希望避免一些繁琐的操作,那么还可以将该部分记录包装到类型别名中

type alias Dated a = { a | date : Date }setTime : Date -> Dated a -> Dated a
而且,你还可以把它们锁起来

type alias Dated a = { a | date : Date }
type alias Checked a { a | check : Bool }
checkAtTime : Date -> Dated (Checked a) -> Dated (Checked a)
你可以写:

setTime : Date -> { a | date : Date } -> { a | date : Date }
其中,
{a | data:Date}
表示a的任何值,其字段名为Date,其类型为
Date


如果您经常使用它,并且希望避免一些繁琐的操作,那么还可以将该部分记录包装到类型别名中

type alias Dated a = { a | date : Date }setTime : Date -> Dated a -> Dated a
而且,你还可以把它们锁起来

type alias Dated a = { a | date : Date }
type alias Checked a { a | check : Bool }
checkAtTime : Date -> Dated (Checked a) -> Dated (Checked a)