我不清楚如何从列表中检索不同的项目。
我有以下代码:
topicsFromLinks : List Link -> List Topic
topicsFromLinks links =
links
|> List.map (\l -> l.topics)
|> List.concat
|> Set.fromList
|> Set.toList
错误:
topicsFromLinks
的定义与其类型不匹配 注解。 -topicsFromLinks
的类型注释始终表示 返回:List Topic
但是返回的值(如上所示)是:
List comparable
我希望以下几行能够在结构平等方面发挥作用:
|> Set.fromList
|> Set.toList
为什么我会收到可比较物品清单?
如何解决此编译错误?
附录
type alias Topic =
{ name : String, isFeatured : Bool }
type alias Link =
{
...
, topics : List Topic
...
}
答案 0 :(得分:5)
值可以是任何类似的类型。这包括Int,Float,Time,Char,String和元组或类似类型的列表。
您试图将Topic
值放在只有类似类型可用的位置。
值得庆幸的是,elm-community/list-extra
包含了一个uniqueBy
函数,它允许您指定自己的函数以将某些内容转换为可比较的函数。
如果您想获取不同的主题列表,并在name
和isFeatured
字段上进行匹配,那么您可以使用toString
将值序列化为可比较的值:
import List.Extra exposing (uniqueBy)
topicsFromLinks : List Link -> List Topic
topicsFromLinks links =
links
|> List.map .topics
|> List.concat
|> uniqueBy toString