Haskell 返回具有指定字段值的记录的记录语法

Haskell record syntax returning a record with specified field value

我是 Haskell 和 Whosebug 的新手。我有 'database' 本书。我正在尝试 return 指定书籍的粉丝列表。

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"] 

您需要做的是对您的 Database:

进行 filter 操作
filter (\x -> (bookTitle x) == title) db

其中 dbDatabase 类型,title 是您作为输入提供的 Title 类型。

这将为您提供所有 [Book] 具有该特定标题的列表。现在您必须使用 map 函数从中提取 Fan 。但请注意,这将为您提供 [[Fan]] 类型,因为您可以拥有多个具有相同标题的条目。因此,您必须应用 concat 才能将它们设为 [Fan]。函数 concat 会将列表的列表连接成一个列表。