I'm having trouble with defining FromField instance for my custom enum data type:
data Role = Staff | Student deriving (Eq, Ord, Show)
To represent Role
in my database, I will use ints 0 and 1 (more roles could be added later) most likely smallint
.
Review
is used in my other data type that represents a row in my db table:
data ReviewAssignment = ReviewAssignment
{ aID :: ID
, reviewID :: ID
, reviewerID :: ID
, revieweeID :: ID
, reviewerRole :: Role -- <-- right there
, reviewFinished :: Bool
, reviewPoints :: Float
} deriving (Show, Eq)
This is my FromRow instance for ReviewAssignment:
instance FromRow ReviewAssignment where
fromRow = ReviewAssignment <$> field <*> field <*> field <*> field <*> field <*> field <*> field
Now I'm just missing the following which I don't understand how to implement :
instance FromField Role where
fromField = undefined
Probably to late but something like this should work (hopefully):
instance FromField Role where
fromField f mdata =
return role
where role = case mdata of
Just 0 -> Staff
_ -> Student