Как да извлека обект чрез `Int`, когато се очаква `Key` в постоянната библиотека на Haskell?

Използвам Persistent orm с scotty web framework.

Искам да получа стойност от db по id. Тези идентификатори идват при мен от GET заявка

Има функция "get", която взема променливата "Key Entity" и връща "Maybe Entity".

Използвам следния код, за да получа стойност от db

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
Всъщност не съм запознат с по-гъвкавия механизъм за първичен ключ в persistent, така че не мога да дам съвет как да се справя с този случай. - person Michael Snoyman; 27.04.2016
comment
За следващия човек, който гугли: квазикавотерът създава декларация във формата newtype Key TypeName = TypeNameKey {unTypeNameKey :: Int32 } от цитата persistLowerCase| TypeName Id Int32 - person bergey; 21.03.2018