是否有可能在haskell中生成记录字段?

时间:2018-01-07 16:12:24

标签: haskell code-generation record template-haskell

假设我有前缀p和字符串列表ss。我想为p ++ s中的每个字符串s生成一个记录字段名称ss

data Example = Example
  { field1 :: String
  , field2 :: String
  -- the rest of the fields are generated
  , prefixString1 :: Maybe String
  , prefixString2 :: Maybe String
  , prefixString3 :: Maybe String
  -- ...
  } deriving (Eq, Show)

我正在为我不拥有的API编写API客户端。提供了某些查询参数,端点将在对象上提供其他参数。

-- without query param
{
  "field_1": "",
  "field_2": ""
}

-- with query param "x"
{
  "field_1": "",
  "field_2": "",
  "field_1_x": "",
  "field_2_x": ""
}

-- with query param "y"
{
  "field_1": "",
  "field_2": "",
  "field_1_y": "",
  "field_2_y": ""
}

查询参数可以有大约30个不同的值,所以我最终会有超过60个字段的大记录,除了后缀不同外,它们基本相同。

1 个答案:

答案 0 :(得分:0)

我不这么认为。

data表示您正在定义新数据类型。 Haskell是一种静态编程语言,意味着所有类型在编译时都是已知的。

使用List,Tree或您可以在运行时扩展/处理的其他数据结构。

<强>观
如果这些属性具有相同的后缀,请将后缀和其他字符串保存在列表中。如果你需要它们,你只需要结合后缀&amp;字符串。

也许是这样的:

data A = A [String] String

create :: A -> [String]
create (A ss suff) = create' ss suff
  where create' [] _ = []
        create' a b = ((head a) ++ b) : create' (tail a) b