1

如何访问查询 [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] )

但我想做的是从返回的 [VarcharIntDate] 的第 n 行访问“d”或从所有行访问“i”,这样我就可以开始从查询中提取数据并开始使用它。

4

1 回答 1

1

您实际上已经处理了IO [VarcharIntDate]. 你使用=<<with 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第-行,然后调用dgetter获取该d行的第。

如果你想获得所有i的你可以使用map i

于 2017-09-04T09:43:40.407 回答