我正在尝试从本质上是包含混合类型的列表的类型中生成一个新列表。我不确定对此的技术描述,所以我提前道歉,但我认为我可以通过使用示例和代码来解释。
例如,我有一个类型/列表,其中定义了以下类型:
type Database = [(Person, [Book]) ]
type Person = String
type Book = String
testBase :: Database
testBase
= [("Alice",["TinTin", "Wizard of Oz"]), ("Rory", ["Learn Erlang", "Learn Haskell"]) ]
在上述数据库类型中,我有一个“模拟”库。第一个值 (Person) 是借阅者的姓名,第二个值是列表,包含此人已借阅的所有书籍。
基于这些信息,我希望能够有一个函数来获取这个人的名字,并返回一个他们借过的书的列表。例如,有一个“爱丽丝”的参数应该返回:
["TinTin", "Wizard of Oz"]
我创建的函数看起来像这样,但返回一个空列表。我希望它返回一个包含书籍值的列表,即 [Book]。我应该怎么做才能使这段代码工作?
borrowedBooks :: Database -> Person -> [Book]
borrowedBooks dBase findPerson
= [book | (person,[book]) <- dBase, person == findPerson ]