1

我在为自定义枚举数据类型定义 FromField 实例时遇到问题:

data Role = Staff | Student deriving (Eq, Ord, Show)

为了Role在我的数据库中表示,我最有可能使用整数 0 和 1(以后可以添加更多角色)smallint

Review在我的其他数据类型中使用,它代表我的 db 表中的一行:

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
4

2 回答 2

2

可能迟到了,但这样的事情应该有效(希望如此):

instance FromField Role where
  fromField f mdata =
    return role
    where role = case mdata of
      Just 0 -> Staff   
      _      -> Student
于 2016-07-18T06:31:08.773 回答
1

fromField应该取一个整数(数据库中的 smallint)并返回一个 Role 值。我建议您使用模式匹配来实现它。您可以在文档中阅读有关fromField 的更多信息。您还可以从预定义的 fromField 实现中获得灵感。

于 2016-01-21T09:42:48.593 回答