You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Purescript中构造首字母大写字段名的记录

解答

完全可以在纯PureScript环境下构造首字母大写字段名的记录,不需要引入外部JavaScript代码,有两种常用实现方案:

方案1:直接使用带引号的字段名语法

PureScript支持用双引号包裹字段名,绕过首字母大写的语法限制,可直接定义符合要求的记录类型:

  • 类型声明和构造示例:
test :: Number -> { "Field1" :: String, "Field2" :: Number }
test num = { "Field1": "something", "Field2": num }
  • 字段访问语法:
readField1 :: { "Field1" :: String | rest } -> String
readField1 record = record."Field1"

方案2:结合序列化库自动重命名字段(更适配API对接场景)

如果你的核心需求是输出符合格式的JSON,不需要在业务代码中频繁操作大写开头的字段,更推荐通过序列化规则重命名的方式实现,更符合PureScript的命名规范:
以常用的purescript-argonaut-codecs库为例,可通过泛型编解码配置自动转换字段名格式:

import Data.Argonaut.Codec (class EncodeJson, encodeJson)
import Data.Argonaut.Generic (genericEncodeJson, defaultOptions)
import Data.String (toCharArray, fromCharArray)
import Data.Char (toUpper)

-- 按PureScript规范定义小写首字母的普通类型
data ApiResponse = ApiResponse
  { field1 :: String
  , field2 :: Number
  }
derive instance Generic ApiResponse _

-- 自定义序列化规则:将字段名首字母转为大写
apiSerializeOptions = defaultOptions
  { fieldLabelModifier = \fieldName -> case toCharArray fieldName of
      [] -> fieldName
      (firstChar : restChars) -> fromCharArray $ toUpper firstChar : restChars
  }

instance EncodeJson ApiResponse where
  encodeJson = genericEncodeJson apiSerializeOptions

按上述配置后,你只需要正常构造ApiResponse { field1: "something", field2: 12 },序列化后会自动生成符合要求的{"Field1":"something","Field2":12}JSON结构。

内容的提问来源于stack exchange,提问作者Fabian Schneider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:48:04