2016-07-09 8 views
1

Ist es möglich, esqueleto zu verwenden, um eine Abfrage zu erstellen, die einen konstanten Wert zurückgibt? Wie zum Beispiel SELECT 1.Esqueleto-Abfrage, die konstanten Wert zurückgibt

+0

Versuchen Sie 'Select (Return 1)' - kann es jetzt nicht überprüfen, aber es könnte funktionieren. – chi

+0

@chi: leider nicht: 'Keine Instanz für (Database.Esqueleto.Internal.Sql.SqlSelect Int r0)' –

Antwort

1

Versuchen Sie folgendes:

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) 

@ chi Kommentar war in der Nähe, aber die 1 benötigt in eine SqlExpr gehoben werden. val wird generisch geschrieben und hängt von einer Klasseninstanz Esqueleto ab. Normalerweise würde der Typinterferenziator dies erfassen, sobald Sie from verwendet und eine SQL-Tabelle abgerufen haben, aber da nichts davon verfügbar ist, müssen wir uns manuell spezialisieren.

Insgesamt ein gutes Beispiel dafür, wie Typklassen Bedeutungen verschleiern und Menschen zwingen können, sich an Dokumentation oder Foren zu wenden.

Verwandte Themen