基本的に混合タイプを含むリストであるタイプから新しいリストを生成しようとしています。これについての技術的な説明はよくわからないので、あらかじめお詫びしますが、例とコードを使用して説明できると思います。
たとえば、次のタイプが定義されたタイプ/リストがあります。
type Database = [(Person, [Book]) ]
type Person = String
type Book = String
testBase :: Database
testBase
= [("Alice",["TinTin", "Wizard of Oz"]), ("Rory", ["Learn Erlang", "Learn Haskell"]) ]
上記のデータベース タイプには、「シミュレートされた」ライブラリがあります。最初の値 (Person) は借り手の名前で、2 番目の値 (リスト) にはその人が借りたすべての本が含まれています。
この情報に基づいて、人の名前を受け取り、借りた本のリストを返す関数を作成したいと考えています。たとえば、"Alice" という引数を指定すると、次のように返されます。
["TinTin", "Wizard of Oz"]
私が作成した関数は次のようになりますが、空のリストを返します。書籍の値、つまり[書籍]を含むリストを返したいです。このコードを機能させるにはどうすればよいですか?
borrowedBooks :: Database -> Person -> [Book]
borrowedBooks dBase findPerson
= [book | (person,[book]) <- dBase, person == findPerson ]