List 从类型列表中删除类型haskell

List 从类型列表中删除类型haskell,list,haskell,types,List,Haskell,Types,我是哈斯克尔的新手,我想知道是否有人能帮我 我有一个自定义数据类型列表,如下所示: type Title = String type Manager = String type Year = Int type Fan = String type Album = (Title, Manager, Year, [Fan]) 我有一个预先制作的专辑静态数据库 albumDatabase :: [Album] albumDatabase = [(...)] 我有一个函数可以返回经理制作的所有相册:

我是哈斯克尔的新手,我想知道是否有人能帮我

我有一个自定义数据类型列表,如下所示:

type Title = String
type Manager = String
type Year = Int
type Fan = String
type Album = (Title, Manager, Year, [Fan])
我有一个预先制作的专辑静态数据库

albumDatabase :: [Album]
albumDatabase = [(...)]
我有一个函数可以返回经理制作的所有相册:

manAlbum :: String -> [Album] -> [Album]
manAlbum d database = filter ((\(_,album,_,_) -> d == album)) database

我的问题是,从这张新的所有经理人专辑列表中,我只需要检索粉丝,并删除标题、经理人和年份。但是,我不确定如何告诉haskell,我只希望从自定义数据类型返回此字段。

如4castle所述,您可以使用
map

getAlbumFans :: [Album] -> [[Fan]]
getAlbumFans database = map (\(_,_,_,fans) -> fans) database

此外,您还可以为
manAlbum
函数指定一个更具描述性的名称,如
getAlbumsByManager
,并将类型签名中的
String
替换为
Manager

另一种解决方案可能是将
Album
设置为代数数据类型。我想,当重写如下代码时,代码可能更容易理解:

type Title = String
type Manager = String
type Year = Int
type Fan = String
data Album = Album { title :: Title, manager :: Manager, year :: Year, fans :: [Fan]} deriving (Show)

albumDatabase :: [Album]
albumDatabase = [Album {title="A", manager="B", year=5, fans=["a","b"]}]

check :: Album -> String -> Bool
check a d=title a==d

manAlbum :: String -> [Album] -> [[Fan]]
manAlbum d database = map (\a->fans a) $ filter (\a->title a==d) database

你的问题并不是真正的问题,但看起来你应该使用
map
来创建一个函数,该函数可以
[Album]->[[Fan]]]
谢谢,更新了我的问题