是否可以写
select min(next) from participant;
作为esqueleto查询?
UPDATE
我发现了min_函数.但是,代码
nextMessageTime =
from $\p -> min_ (p ^. ParticipantNext)
显然有一些模棱两可的类型:
Could not deduce (Database.Esqueleto.Internal.Language.From
query expr backend (query (Entity (ParticipantGeneric backend0))))
arising from the ambiguity check for ‘nextMessageTime’
from the context (Database.Esqueleto.Internal.Language.From
query expr backend (query (Entity (ParticipantGeneric backend2))),
Esqueleto query1 query backend1)
bound by the inferred type for ‘nextMessageTime’:
(Database.Esqueleto.Internal.Language.From
query expr backend (query (Entity (ParticipantGeneric backend2))),
Esqueleto query1 query backend1) =>
query (Value (Maybe Int64))
at Presta/DB/Queries.hs:(15,1)-(16,42)
The type variable ‘backend0’ is ambiguous
When checking that ‘nextMessageTime’
has the inferred type ‘forall (query :: * -> *)
(expr :: * -> *)
backend
(query1 :: * -> *)
backend1
backend2.
(Database.Esqueleto.Internal.Language.From
query expr backend (query (Entity (ParticipantGeneric backend2))),
Esqueleto query1 query backend1) =>
query (Value (Maybe Int64))’
Probable cause: the inferred type is ambiguous
最佳答案 我设法使用persistent的rawSql来实现这一点:
nextMessageTime = do
[Single t] <-
rawSql
"SELECT min(next) FROM participant"
[]
return (t :: Int64)
(但是如果你要复制这段代码,请注意这种无穷无尽的模式.)