Search code examples
postgresqlhaskellfieldinstancepostgresql-simple

Haskell PostgreSQL Simple FromField


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

Solution

  • 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