Haskell PostgreSQL Simple FromField

У меня проблемы с определением экземпляра FromField для моего пользовательского типа данных enum:

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

Представлять Role в моей базе данных я буду использовать целые 0 и 1 (больше ролей можно добавить позже), скорее всего smallint,

Review используется в моем другом типе данных, который представляет строку в моей таблице БД:

data ReviewAssignment = ReviewAssignment
  { aID :: ID
  , reviewID :: ID
  , reviewerID :: ID
  , revieweeID :: ID
  , reviewerRole :: Role -- <-- right there
  , reviewFinished :: Bool
  , reviewPoints :: Float
  } deriving (Show, Eq)

Это мой экземпляр FromRow для ReviewAssignment:

instance FromRow ReviewAssignment where
  fromRow = ReviewAssignment <$> field <*> field <*> field <*> field <*> field <*> field <*> field

Сейчас мне просто не хватает следующего, что я не понимаю, как реализовать:

instance FromField Role where
  fromField = undefined

2 ответа

Решение

Возможно, поздно, но что-то вроде этого должно работать (надеюсь):

instance FromField Role where
  fromField f mdata =
    return role
    where role = case mdata of
      Just 0 -> Staff   
      _      -> Student

fromField должен взять целое число (smallint из вашей базы данных) и вернуть значение Role. Я полагаю, вы реализуете это с помощью сопоставления с образцом. Вы можете прочитать больше о fromField в документации. Вы также можете черпать вдохновение из предопределенных реализаций fromField.

Другие вопросы по тегам