如何在Haskell中使用yaml库创建别名?

时间:2015-12-28 17:18:45

标签: haskell yaml

我正在使用YAML配置文件,并且已经为我的数据类型提供了所有必需的ToJSON / FromJSON实例。一切都很好,除了有很多重复的字段,所以我想在导出过程中自动为它们制作别名(并用别名替换它们的所有进一步出现)。

而不是

- security: &securityAlias1
    security_level: authNoPriv
    auth_password: ! 'mypassword'
    username: myuser
    auth_protocol: MD5
    private_protocol: None
    private_password: None
- security: *securityAlias1
  ...

我想得到

class Questionnaire(models.Model):
    YES_NO_CHOICES = (
        (1, 'Yes'),
        (0, 'No'),
    )
    satisfaction = models.SmallPoistiveIntegerField(choices=YES_NO_CHOICES, default=1)
    register = models.DateField(auto_now_add=True)

如何在Haskell中实现这一目标?

1 个答案:

答案 0 :(得分:1)

不幸的是,当前的yaml版本只能在解析过程中理解别名。它不会在Value中保护它们,因为它使用Data.Aeson.Value来存储YAML值。

yaml-0.8.15.2's description:

  

在大多数情况下,YAML内容直接转换为JSON,因此几乎没有数据丢失。 如果你需要更直接地处理YAML(例如,直接处理别名),你应该使用Text.Libyaml模块。 [强调我的]

这意味着您必须使用Text.Libyaml.Event界面并亲自浏览事件。