List Haskell:从混合类型列表生成集合

List Haskell:从混合类型列表生成集合,list,haskell,set,generator,List,Haskell,Set,Generator,我试图从一个类型生成一个新列表,该类型本质上是一个包含混合类型的列表。我不确定这方面的技术描述,所以我提前道歉,但我想我可以用示例和代码来解释 例如,我有一个定义了以下类型的类型/列表: type Database = [(Person, [Book]) ] type Person = String type Book = String testBase :: Database testBase = [("Alice",["TinTin", "Wizard of Oz"]), ("Rory"

我试图从一个类型生成一个新列表,该类型本质上是一个包含混合类型的列表。我不确定这方面的技术描述,所以我提前道歉,但我想我可以用示例和代码来解释

例如,我有一个定义了以下类型的类型/列表:

type Database = [(Person, [Book]) ]
type Person = String
type Book = String

testBase :: Database
testBase 
= [("Alice",["TinTin", "Wizard of Oz"]), ("Rory", ["Learn Erlang", "Learn Haskell"]) ]
在上面的数据库类型中,我有一个“模拟”库。第一个值(Person)是借款人的名称,第二个值(list)包含该人所借的所有书籍

基于此信息,我希望能够有一个函数,该函数接受此人的姓名,并返回他们所借书籍的列表。例如,有一个参数“Alice”应该返回:

 ["TinTin", "Wizard of Oz"]
我创建的函数如下所示,但返回一个空列表。我希望它返回一个包含账面价值的列表,即[book]。我该怎么做才能让代码正常工作

borrowedBooks       :: Database -> Person -> [Book]
borrowedBooks dBase findPerson
=   [book | (person,[book])  <- dBase, person == findPerson ]
借来的书籍::数据库->人->[书籍]
借来的书dBase findPerson

=[book |(person,[book])您的搜索函数包含以下模式匹配:

(person, [book]) <- dBase

(person,[book])您的搜索功能包含以下模式匹配:

(person, [book]) <- dBase

(person,[book])此外,考虑到所使用的数据结构,简单的
查找就足够了。
借阅图书=翻转查找
。感谢您的帮助,这解释了很多。根据您的解释,函数将返回一种[[book]]。这可能是一件小事,但后来我发现有两种方法可以解决此问题。要么将函数更改为:借阅图书::数据库->人物->[[Book]],要么执行类似操作:head[books |(人物,图书)此外,考虑到使用的数据结构,简单的
查找
就足够了。
借阅书籍=翻转查找
。感谢您的帮助,这解释了很多。根据您的解释,函数将返回[[Book]]类型。这可能是一件小事,但后来我发现有两种方法可以解决此问题。要么将函数更改为:借阅图书::数据库->人物->[[Book]],要么执行类似操作:head[books |(人物,图书)