我有一个数据类型

data Reading = Reading
  { title :: String
  , authors :: Vector String
  , startDate :: Day
  , endDate :: Maybe Day
  }
  deriving (Eq, Show, Generic, FromRow, ...)

我希望能够在POST端点为表单创建

    :<|> "reading" :> ReqBody '[FormUrlEncoded] Reading :> Post '[HTML] Reading

为此,我需要为Reading派生一个FromForm实例.问题是没有实例FromHttpApiData (Vector String).似乎确实有一个[String]的例子.我 Select 了Vector String,这样我也可以派生FromRow,这允许我使用PostgreSQL-Simple自然地提取记录.

那么,有没有一种类型可以用于authors字段,以同时派生FromRowFromForm呢?我确实花了相当多的时间在文档中进行试验,但都无济于事.或者,也许我应该考虑定义一个定制实例,或者根据用例对authors的类型进行参数化?

推荐答案

看起来确实没有机制来推导出VectorFromForm个实例.

我将手动定义该实例:

instance FromForm Reading where
  fromForm f =
    Reading
      <$> parseUnique "title" f
      <*> (fromList <$> parseAll "authors" f)
      <*> parseUnique "startDate" f
      <*> parseMaybe "endDate" f

Postgresql相关问答推荐

使用regexp获取表名

Postgres如何插入带有十进制逗号的实数?

PL/pgSQL中的IP递增函数

try 访问本地主机中的数据库时如何解决Error: The server does not support SSL connections?

postgres 和 python

如何在 Postgres 中的列上删除唯一约束?

如何从 WSL 连接到 windows postgres 数据库

如何将 DELETE 的返回值插入到 postgresql 中的 INSERT 中?

Rails 4查询由单个属性唯一

IntegrityError:postgres 从转储恢复后,所有具有 ForeignKey 的模型/字段的id列中的空值

Psycopg2 使用占位符插入表格

如何为查询执行设置语句超时

使用 current_setting() 判断值

如何在数据库表中查找重复条目?

获取 psycopg2 count(*) 结果数

如何为 Postgres psql 设置时区?

Oracle 相当于 Postgres 的 DISTINCT ON?

如何为 postgres 编写 DELETE CASCADE?

如何查询前 10 行,下一次从表中查询其他 10 行

PostgreSQL - pg_config -bash:pg_config:command not found