2016-07-09 3 views
1

Можно ли использовать esqueleto для создания запроса, который возвращает постоянное значение? Например, SELECT 1.Запрос Esqueleto, возвращающий постоянное значение

+0

Попробуйте 'select (return 1)' - не можете проверить его сейчас, но это может сработать. – chi

+0

@chi: к сожалению нет: 'Нет экземпляра для (Database.Esqueleto.Internal.Sql.SqlSelect Int r0)' –

ответ

1

Попробуйте это:

import Database.Esqueleto 

-- | We have to specialize `val` or else the type inferencer 
-- will complain about the `Esqueleto` instance. 
val_ :: Int -> SqlExpr (Value Int) 
val_ = val 

query :: SqlPersistT IO [Value Int] 
query = select $ return (val_ 1) 

@ комментарий ци был близок, но 1 нужно поднимать в SqlExpr. val записывается в общем виде и зависит от экземпляра класса Esqueleto. Обычно тип inferencer захватывал бы это, как только вы использовали from и вытащили бы в SQL-таблицу, но поскольку ни один из них не доступен здесь, мы должны специализироваться вручную.

В целом хороший пример того, как typeclasses могут запутать смысл и заставить людей обращаться к документации или форумам.