Functional programming 需要帮助建模调色板类型吗

Functional programming 需要帮助建模调色板类型吗,functional-programming,elm,Functional Programming,Elm,我正试图按照本文中的指导方针在Elm中创建一个调色板类型。我的第一个想法是: type alias Palette = List Color 但这也有缺点。调色板是一个颜色列表,但它也必须有两种颜色,一种用于背景,一种用于前景 我的第二次尝试是创建一个记录类型: type alias Palette = { bg : Color , fg : List Color } 这样更好,但如何确保fg字段是至少包含一个元素的列表 关于如何从功能和功能上思考,有什么提示吗 谢谢 如果我正

我正试图按照本文中的指导方针在Elm中创建一个调色板类型。我的第一个想法是:

type alias Palette = List Color
但这也有缺点。调色板是一个颜色列表,但它也必须有两种颜色,一种用于背景,一种用于前景

我的第二次尝试是创建一个记录类型:

type alias Palette = 
  { bg : Color
  , fg : List Color
  }
这样更好,但如何确保
fg
字段是至少包含一个元素的列表

关于如何从功能和功能上思考,有什么提示吗


谢谢

如果我正确理解了您的问题,那么您正在寻找表示至少包含一个元素的列表的数据类型。您可以使用以下内容定义自己的此类列表:

type NonEmptyList a=ListItem a(NonEmptyList a)| RootItem a
为了简化操作,您可以定义一些辅助函数,以便在普通Elm
列表中进行转换:

toList:nonemptylista->List a
收费表=
病人名单
根项目x->[x]
ListItem x rest->x::toList rest
fromList:List a->Maybe(非空列表a)
fromList列表=
病人名单
[]->什么都没有
[x] ->仅(根项目x)
(x::xs)->maybay.map(列表项x)