簡體   English   中英

從類型列表haskell中刪除類型

[英]remove type from type list haskell

所以我是Haskell的新手,我想知道是否有人可以幫助我。

我有一個自定義數據類型的列表,如下所示:

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

您還可以通過為其提供更具描述性的名稱(如getAlbumsByManager並使用Manager替換類型簽名中的String ,使manAlbum函數更具可讀性。

另一種解決方案可能是使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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM