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]]]
谢谢,更新了我的问题