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

时间:2015-02-18 14:58:06

标签: haskell syntax types record

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

1 个答案:

答案 0 :(得分:2)

您需要做的是filter上的Database操作:

filter (\x -> (bookTitle x) == title) db

其中db的类型为Database,而title的类型为Title,您将其作为输入。

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