如何在haskell中声明多个"attributes"?

How to declare multiple "attributes" in haskell?

我必须做一个视频俱乐部项目。我的问题:当我创建数据结构时,我不能声明超过 1 个 ID、名称或任何 "attribute" . 这是我的代码:

data Client = Client
  { _id        :: Int
  , _name      :: String
  , _lastname  :: String
  , _age       :: Int
  , _movies    :: [Movie]
  } deriving Show

data VideoClub = VideoClub
  { _id        :: Int
  , _name      :: String
  , _direccion :: String
  } deriving Show

data Movie= Movie
  { _id          :: Int
  , _title       :: String
  , _rented      :: Bool
  , _videoclub   :: VideoClub
  , _category    :: String
  } deriving Show

这是我遇到的众多问题之一。希望你能帮助我并给我一些建议。谢谢。

要考虑的另一个选择是 Identified 类型:

data Identified a = Identified
  { _id  :: Int
  , _val :: a
  } deriving (Functor, Show)

instance Comonad Identified where
  extract = _val
  duplicate v = Identified (_id v) v

data Client = Client
  { _name      :: String
  , _lastname  :: String
  , _age       :: Int
  , _movies    :: [Movie]
  } deriving Show

然后您可以选择在整个源代码中适当地使用 ClientIdentified Client(对于其他类型也是如此)。这也使 IntMap Client 之类的事情更加理智:不需要保留 Client_id 与其在映射中的键匹配的不变量。