Я пытаюсь использовать unsafeSqlExtractSubField
от Esqueleto, чтобы создать тот, который будет извлекать год из даты, такой как:
data ReportRow = ReportRow Text
userSignupData :: MonadIO m => Key User -> SqlPersistT m [ReportRow]
userSignupData _ = fmap toRow <$> select (from query)
where
query s =
pure $ (extractYear $ s ^. UserCreatedAt)
toRow yearVal = ReportRow (showText . unValue $ yearVal)
extractYear :: UnsafeSqlFunctionArgument a => a -> SqlExpr (Value Integer)
extractYear =
unsafeSqlExtractSubField "year"
showText :: Show a => a -> Text
showText = T.pack . show
Но я получаю ошибку:
Could not deduce
(UnsafeSqlFunctionArgument
(expr0 (Value UTCTime)))
arising from a use of ‘query’
from the context: MonadIO m
bound by the type signature for:
userSignupData :: forall (m :: * -> *).
MonadIO m =>
Key User -> SqlPersistT m [ReportRow]
The type variable ‘expr0’ is ambiguous
|
20 | userSignupData _ = fmap toRow <$> select (from query)
| ^^^^^
Нужно ли мне определять здесь экземпляр UnsafeSqlFunctionArgument
для UTCTime
или я пытаюсь вписать квадратный колышек в круглое отверстие?
Я не отвечаю на это состояниечтобы я мог извлечь дату на уровне haskell, я бы хотел получить год внутри запроса, чтобы я мог выполнить SQL GROUP BY
внутри запроса.