Вы можете определить помощника:
fetchRowFromSql :: Convertible SqlValue a => Statement -> IO (Maybe [a])
fetchRowFromSql = fmap (fmap (fmap fromSql)) . fetchRow
Реализация выглядит немного устрашающе, но это только потому, что нам нужно углубиться в слоистые функторы, как вы уже заметили (сначала IO
, затем Maybe
и, наконец, []
). Это возвращает что-то, что можно конвертировать из SqlValue
. Есть несколько из них уже определены. Смотрите, например документы . Пример (с использованием -XTypeApplications
):
fetchRowFromSql @String :: Statement -> IO (Maybe [String])
Возможно, мне следует добавить, что в документации упоминается, что fromSql
небезопасен. Это означает, что если вы попытаетесь преобразовать значение sql в несовместимое значение Haskell, программа остановится.