
On Sat, Nov 24, 2012 at 12:07 PM, Erik de Castro Lopo
Hi all,
Below my .sig is a little Persist/Esqueleto program that works correctly.
The getUserCount function does thr right thing and returns the number of rows in the User table. However, what I'd like is a generic function that returns the row count of any table, something vaguely like this:
queryRowCount :: tableType -> SqlPersist IO Int64 queryRowCount tableName = do [Value x] <- select . from $ \(_ :: SqlExpr (Entity tableName)) -> return countRows return x
Is there any way to do this? Its probably possible in Agda, but can it be made to work with GHC?
How about something like this: {-# LANGUAGE ScopedTypeVariables #-} queryRowCount :: forall tableType. Proxy tableType -> SqlPersist IO Int64 queryRowCount _ = do [Value x] <- select . from $ \(_ :: SqlExpr (Entity tableType)) -> return countRows return x The Proxy type is defined as: data Proxy a = Proxy You can use the 'tagged' package to get it. ScopedTypeVariables and the explicit forall are needed to make sure the type 'tableType' from the top level signature is the same as the one used later. Erik