有没有办法在Haskell中创建具有未确定数量的字段的数据类型

Ian*_*ick 5 csv haskell types

我正在尝试读取CSV文件,其中第一行具有每列的名称.然后我必须适当地编辑这些文件.我有一个想法,当我第一次读入文件,然后创建一个名为Record的新数据类型,然后所有后来的记录只是这种类型的实例,现在很明显,如果程序只需处理一种类型的CSV文件一定数量的列这很容易,但遗憾的是,情况并非总是如此.

所以我的问题是你能做点什么吗?

createRecordClass (x:xs) = data Record {addRecord(x:xs)}
addRecord (x:xs) = x::String, addRecord xs
Run Code Online (Sandbox Code Playgroud)

或者我只是说疯了,只是有一个列表代表一切会更容易吗?

Che*_*tan 1

你可以使用Template Haskell来实现你想要的。这是通过 Haskell 生成 Haskell 代码的强大技术(类似于 lisp 中的宏)。

由于您提到您希望 csv 文件的标头创建自定义数据类型,因此您需要读取该文件,然后在 Template Haskell 中生成数据类型。我见过的最接近您所描述的解决方案是Yesod中的 CRUD 系统。在Hackage上查看他们的持久包。