我是Haskell和StackOverflow的新手。我有一个书籍的“数据库”。我正在尝试返回指定书籍的粉丝列表。
type Title = String
type Author = String
type Year = Int
type Fan = String
data Book = Book { bookTitle :: Title
, bookAuthor:: Author
, bookYear :: Year
, bookFans :: [Fan]
}
deriving (Show)
type Database = [Book]
bookDatabase :: Database
bookDatabase = [Book "Harry Potter" "JK Rowling" 1997 ["Sarah","Dave"]]
我不知道该怎么做。我尝试过使用过滤功能。我想要以下行为。
fansOfBook :: Title -> Database -> [Fan]
fansOfBook "Harry Potter"
["Sarah","Dave"]
答案 0 :(得分:2)
您需要做的是filter
上的Database
操作:
filter (\x -> (bookTitle x) == title) db
其中db
的类型为Database
,而title
的类型为Title
,您将其作为输入。
这将为您提供具有该特定标题的所有[Book]
的列表。现在,您必须使用Fan
函数从中提取map
。但请注意,这将为您提供[[Fan]]
类型,因为您可以拥有多个具有相同标题的条目。因此,您必须应用concat
将其作为[Fan]
。函数concat
将列表列表连接成一个单一列表。