作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题是opinion-based .它目前不接受答案。
想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.
3年前关闭。
Improve this question
我正在使用 Haskell 设计一个更大的 Web 应用程序。这纯粹是为了我的教育和兴趣。
我首先写出我的域/值对象。一个例子是用户。这是我到目前为止想出的
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
fieldName :: Type -> FieldType
.有 20 种不同的类型,命名空间似乎很快就会变得非常满。另外,我不喜欢将我的用户 ID 字段命名为
userId
。 .我宁愿把它命名为
id
.有没有办法解决?
最佳答案
是的,命名空间在 Haskell 中可能是一种痛苦。我通常最终会收紧我的抽象,直到没有那么多名字。它还允许更多的重用。对于你的,我会为审计信息创建一个数据类型而不是一个类:
data Audit = Audit {
creationDate :: Integer,
lastUpdatedDate :: Integer,
creationUser :: User,
lastUpdatedUser :: User
}
data User = User {
userAudit :: Audit,
userId :: Integer,
userEmail :: String
}
class Audited a where
audit :: a -> Audit
class Identified a where
ident :: a -> Integer
a
类型的参数——有办法简化自己。
data Object a = Object {
objId :: Integer,
objAudit :: Audit,
objData :: a
}
Object
是
Functor
!
instance Functor Object where
fmap f (Object id audit dta) = Object id audit (f dta)
关于haskell - 在 Haskell 中建模领域数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5775068/
我是一名优秀的程序员,十分优秀!