Извлечение года из поля метки времени в запросе Esqueleto - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь использовать 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 внутри запроса.

...