Как получить объект по «Int», когда ожидается «Key» в постоянной библиотеке Haskell?

Я использую Persistent orm со скотти-веб-фреймворком.

Я хочу получить значение из БД по идентификатору. Эти идентификаторы приходят ко мне из запроса GET

Есть функция "get", которая принимает переменную "Key Entity" и возвращает "Maybe Entity".

Я использую следующий код, чтобы получить значение из БД

k <- keyFromValues $ [(PersistInt64 myOwnIntVarFromRequest)]
case k of
    Left _ -> {-some processing-}
    Right x -> do
    t <- liftIO . runDb $ get (x::Key Post) --Post is one of my models
    case t of
        Nothing -> {-processing-}
        Just x -> {-processing-}

Этот код чрезвычайно уродлив. Но я не знаю, как сделать это лучше

Итак, мой вопрос заключается в том, как получить переменную типа «Key Entity» без вызова keyFromValues.

PS Извините за мой плохой английский


person Dark_Daiver    schedule 21.01.2015    source источник


Ответы (1)


Для этого можно использовать toSqlKey. .

person Michael Snoyman    schedule 22.01.2015
comment
@ michael-snoyman: Что, если у ключа другой тип, чем Int64? - person snøreven; 27.04.2016
comment
На самом деле я не знаком с более гибким механизмом первичного ключа в постоянных, поэтому не могу посоветовать, как поступить в этом случае. - person Michael Snoyman; 27.04.2016
comment
Для следующего гугления: квазицитатор создает объявление вида newtype Key TypeName = TypeNameKey {unTypeNameKey :: Int32 } из цитаты persistLowerCase| TypeName Id Int32 - person bergey; 21.03.2018