2016-01-21 3 views
1

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

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 

ответ

1

Вероятно, до конца, но что-то, как это должно работать (надеюсь):

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

fromField следует взять целое число (небольшое число из вашей базы данных) и вернуть значение роли. Я предлагаю вам реализовать его с помощью сопоставления с образцом. Вы можете узнать больше о fromField in the documentation. Вы также можете вдохновить от predefined fromField implementations.

+1

Я прочитал документацию, но я до сих пор не понимаю совсем ясно, так что я прошу здесь. Я понимаю концепцию, но я не знаю, как это сделать с помощью FromField – Reygoch