odelagem de dados de domínio em Haskell [fechado]
Estou trabalhando no design de um aplicativo da web maior usando Haskell. Isso é apenas para minha educação e interesse.
Estou começando escrevendo meus objetos de domínio / valor. Um exemplo é um usuário. Aqui está o que eu criei até agora
module Model (User) where
class Audited a where
creationDate :: a -> Integer
lastUpdatedDate :: a -> Integer
creationUser :: a -> User
lastUpdatedUser :: a -> User
class Identified a where
id :: a -> Integer
data User = User { userId :: Integer
, userEmail :: String
, userCreationDate :: Integer
, userLastUpdatedDate :: Integer
, userCreationUser :: User
, userLastUpdatedUser :: User
}
instance Identified User where
id u = userId u
instance Audited User where
creationDate u = userCreationDate
lastUpdatedDate u = userLastUpdatedDate
creationUser u = userCreationUser
lastUpdatedUser u = userLastUpdatedUser
Minha aplicação terá aproximadamente 20 tipos, como o tipo acima. Quando digo "como o tipo acima", quero dizer que eles terão um ID, informações de auditoria e algumas informações específicas de tipo (como e-mail no caso de Usuário).
O que eu não consigo entender é o fato de que cada um dos meus campos (por exemplo, User.userEmail) cria uma nova funçãofieldName :: Type -> FieldType
. Com 20 tipos diferentes, o espaço para nome parece ficar muito rápido. Além disso, não gosto de nomear meu campo de ID do usuáriouserId
. Prefiro nomearid
. Existe alguma maneira de contornar isso
Talvez eu deva mencionar que estou vindo do mundo imperativo, então esse material de FP é bem novo (mas emocionante) para mi