gpt4 book ai didi

database - 获取记录字段的文本表示?

转载 作者:搜寻专家 更新时间:2023-10-30 19:47:48 25 4
gpt4 key购买 nike

有以下记录:

data Sleep = Sleep
{ _duration :: Maybe Int
, _drunk :: Bool
}

有没有办法做到以下几点:

deriveSomething ''Sleep

fieldName duration :: String -- "duration"

我需要它来更新类型安全的数据库特定字段,即:

setField connection key duration (Just 50)

虽然它需要与数据库无关(因此 opaleye 等已出局)。

(如果这可以通过像 lens 这样的标准包来实现,那就更好了,但我找不到任何东西。)

最佳答案

您可以使用 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)

这样您就不必不断地重新计算它。

关于database - 获取记录字段的文本表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35651252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com