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_ выполняя mapping или доступ к 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,

Другие вопросы по тегам