如何在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
然后您可以选择在整个源代码中适当地使用 Client
或 Identified Client
(对于其他类型也是如此)。这也使 IntMap Client
之类的事情更加理智:不需要保留 Client
的 _id
与其在映射中的键匹配的不变量。
我必须做一个视频俱乐部项目。我的问题:当我创建数据结构时,我不能声明超过 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
然后您可以选择在整个源代码中适当地使用 Client
或 Identified Client
(对于其他类型也是如此)。这也使 IntMap Client
之类的事情更加理智:不需要保留 Client
的 _id
与其在映射中的键匹配的不变量。