Как сохранить Enum ADT в Persistent

Как вы храните перечисление в Persistent?

Скажем, у вас есть данные State = Ready | Не готов | Ошибка

Как вы храните это в постоянной базе данных?


person user3852278    schedule 18.07.2014    source источник


Ответы (2)


Это очень просто с помощью derivePersistentField, так как Документы Yesod показать. Для вашего случая вы можете сделать что-то вроде этого

-- State.hs
{-# LANGUAGE TemplateHaskell #-}
module State where

import Database.Persist.TH
import Prelude

data State = Ready | Unready | Error
    deriving (Show, Read, Eq)
derivePersistField "State"

Затем вы можете импортировать это и использовать в своей модели как:

-- Model.hs
import State

SomethingSomething
    state State
person bheklilr    schedule 18.07.2014
comment
Важное примечание, извлеченное из git. Примечание. Если вы создали новый модуль, обязательно добавьте его в раздел «открытые модули» вашего файла Cabal. - person FtheBuilder; 12.01.2016
comment
Еще одно замечание: из-за «ограничения этапа» это определение должно находиться в отдельном от Моделей модуле. - person Norrius; 06.02.2019

См. документацию здесь для примера: https://github.com/yesodweb/yesod/wiki/Persistent-entity-syntax#sum-types

person Sebastian Dröge    schedule 18.07.2014