haskell postgresql-простой, как получить доступ к конкретным данным из более широкого запроса
Как я могу получить доступ к данным в моем запросе [VarcharIntDate]?
data VarcharIntDate = VarcharIntDate {
vc :: Maybe String,
i :: Maybe Int,
d :: Maybe Date
} deriving (Show)
instance FromRow VarcharIntDate where
fromRow = VarcharIntDate <$> field <*> field <*> field
Я понимаю, как его распечатать, но больше ничего не могу с этим поделать, потому что не понимаю, как обращаться с "IO [VarcharIntDate]"
print =<< ( query_ conn "select vc,i,d from varintdate" :: IO [VarcharIntDate] )
но я хочу получить доступ к 'd' из n-й строки возвращенных [VarcharIntDate] или 'i' из всех строк, поэтому я могу начать извлекать данные из запроса и начать работать с ним.
1 ответ
Вы фактически уже обрабатываете результат IO [VarcharIntDate]
, Ты используешь =<<
с print
, Это эквивалентно:
main = do -- or another function
result <- query_ conn "select vc,i,d from varintdate" :: IO [VarcharIntDate]
print result
Вы можете обработать результат query_
выполняя map
ping или доступ к n- му элементу строки, например:
p = 2 -- sample p
main = do
res <- query_ conn "select vc,i,d from varintdate" :: IO [VarcharIntDate]
print (map i res) -- print all i's
print (d (res!!p)) -- print d of the p-th row
Так что здесь мы можем использовать res!!p
чтобы получить доступ к p
-ой строке, а затем вызвать d
добытчик, чтобы получить d
из этого ряда.
Если вы хотите получить все i
Вы можете использовать map i
,