Haskell PostgreSQL 简单 FromField
Haskell PostgreSQL Simple FromField
我在为自定义枚举数据类型定义 FromField 实例时遇到问题:
data Role = Staff | Student deriving (Eq, Ord, Show)
为了在我的数据库中表示 Role
,我将使用整数 0 和 1(以后可以添加更多角色)最有可能 smallint
。
Review
用于我的其他数据类型,代表我的数据库中的一行 table:
data ReviewAssignment = ReviewAssignment
{ aID :: ID
, reviewID :: ID
, reviewerID :: ID
, revieweeID :: ID
, reviewerRole :: Role -- <-- right there
, reviewFinished :: Bool
, reviewPoints :: Float
} deriving (Show, Eq)
这是我的 ReviewAssignment 的 FromRow 实例:
instance FromRow ReviewAssignment where
fromRow = ReviewAssignment <$> field <*> field <*> field <*> field <*> field <*> field <*> field
现在我只缺少以下我不明白如何实现的内容:
instance FromField Role where
fromField = undefined
fromField
应该取一个整数(来自你的数据库的 smallint)和 return 一个 Role 值。我建议您使用模式匹配来实现它。您可以阅读有关 fromField in the documentation. You can also take inspiration from predefined fromField implementations.
的更多信息
可能会迟到,但这样的事情应该有效(希望如此):
instance FromField Role where
fromField f mdata =
return role
where role = case mdata of
Just 0 -> Staff
_ -> Student
我在为自定义枚举数据类型定义 FromField 实例时遇到问题:
data Role = Staff | Student deriving (Eq, Ord, Show)
为了在我的数据库中表示 Role
,我将使用整数 0 和 1(以后可以添加更多角色)最有可能 smallint
。
Review
用于我的其他数据类型,代表我的数据库中的一行 table:
data ReviewAssignment = ReviewAssignment
{ aID :: ID
, reviewID :: ID
, reviewerID :: ID
, revieweeID :: ID
, reviewerRole :: Role -- <-- right there
, reviewFinished :: Bool
, reviewPoints :: Float
} deriving (Show, Eq)
这是我的 ReviewAssignment 的 FromRow 实例:
instance FromRow ReviewAssignment where
fromRow = ReviewAssignment <$> field <*> field <*> field <*> field <*> field <*> field <*> field
现在我只缺少以下我不明白如何实现的内容:
instance FromField Role where
fromField = undefined
fromField
应该取一个整数(来自你的数据库的 smallint)和 return 一个 Role 值。我建议您使用模式匹配来实现它。您可以阅读有关 fromField in the documentation. You can also take inspiration from predefined fromField implementations.
可能会迟到,但这样的事情应该有效(希望如此):
instance FromField Role where
fromField f mdata =
return role
where role = case mdata of
Just 0 -> Staff
_ -> Student