2016-01-21 49 views
1
我在與定義我的自定義枚舉數據類型FromField實例麻煩

哈斯克爾PostgreSQL的簡單FromField

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

爲了表示Role在我的數據庫,我將使用整數可以添加0和1(更多角色以後)最有可能的smallint

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 

現在,我只是缺少

Review在代表我的數據庫表中的行我的其他數據類型用於之後我不明白如何實現:

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應該取一個整數(數據庫中的smallint)並返回一個Role值。我sugegst你使用模式匹配來實現它。您可以閱讀有關fromField in the documentation的更多信息。您也可以從predefined fromField implementations獲取靈感。

+1

我已經閱讀文檔,但我還是不明白它很清楚,所以我問在這裏。我理解這個概念,但我不知道如何使用FromField來完成 – Reygoch