Haskell HDBC库:是否有一种优雅的方法在[SqlValue]和记录之间进行转换?

时间:2018-07-22 18:34:40

标签: haskell hdbc

由于我无法company_doctor查看记录,因此,我发现的最佳方法是仅使用蛮力:

map

如果我更改data Item = Item { vendor :: Int, lotNumber :: Int, description :: String, reserve :: Maybe Double, preSaleBids :: Maybe Double, salePrice :: Maybe Double, purchaser :: Maybe Int, saleID :: Maybe Int } hsToDb :: Item -> [SqlValue] hsToDb (Item a b c d e f g h) = [toSql a, toSql b, toSql c, toSql d, toSql e, toSql f, toSql g, toSql h] dbToHs :: [SqlValue] -> Item dbToHs [a,b,c,d,e,f,g,h] = Item (fromSql a) (fromSql b) (fromSql c) (fromSql d) (fromSql e) (fromSql f) (fromSql g) (fromSql h) 记录的长度,那么这段代码看起来很丑陋,并且还需要更新,因此我想知道是否存在一种巧妙的方法来概括这个想法。

1 个答案:

答案 0 :(得分:0)

根据您所使用的(Int, Int, String, ...)类型的库而定,可能已经有一个sqlite-simple实例(例如FromRow)。如果您需要Item为新类型,则可以使用GeneralizedNewtypeDeriving扩展名免费获取该实例。除非这样做,否则您当然可以定义自己的类型class / helper方法以使其更干燥。