有以下记录:
onBindViewHolder()
有没有办法执行以下操作:
data Sleep = Sleep
{ _duration :: Maybe Int
, _drunk :: Bool
}
我需要这个用于类型安全的DB特定字段更新,即:
deriveSomething ''Sleep
fieldName duration :: String -- "duration"
它需要与数据库无关(因此setField connection key duration (Just 50)
等等)。
(如果可以通过opaleye
这样的标准包更好地实现,但我找不到任何东西。)
答案 0 :(得分:2)
您可以使用Data.Data
:
{-# LANGUAGE DeriveDataTypeable #-}
import Data.Data
data Sleep = Sleep
{ _duration :: Maybe Int
, _drunk :: Bool
} deriving (Typeable, Data)
fieldNames :: Data a => a -> [String]
fieldNames = constrFields . toConstr
示例:
> fieldNames (Sleep undefined undefined)
["_duration", "_drunk"]
之后你必须决定如何将名称转换为数据库列,但这应该相当容易。
这需要使用特定构造函数创建的值,请记住数据类型可以包含许多构造函数。没有办法解决这个问题,但你可能会有类似
的东西sleepFieldNames :: [String]
sleepFieldNames = fieldNames (Sleep undefined undefined)
这样您就不必重新计算它了。