Тип ключа динамической записи - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь сгенерировать YAML, содержащий карту с динамическими ключами, как описано здесь .Это работает, если я использую Text ключи, но не тогда, когда ключи имеют любой другой тип.Я хотел бы использовать тип объединения для ключей, если это возможно.

Я пытался использовать различные типы для mapKey, включая тип объединения и Natural, но безуспешно.Я могу обойти эту проблему, преобразовав все значения mapKey в Text, но это не идеально.

Вот минимальный пример того, что я пытаюсь сделать:

let Union = <A | B>
in
[{mapKey = Union.A, mapValue = "foo"}]

Я ожидаю, что он сгенерирует YAML:

A: foo

, но вместо этого сгенерированный YAML выглядит так:

- mapKey: A
  mapValue: foo

1 Ответ

0 голосов
/ 13 июля 2019

Ваш вопрос вдохновил вас на добавление этой функции, которая будет доступна в следующем выпуске (Версия 1.25.0).См .:

https://github.com/dhall-lang/dhall-haskell/pull/1094

Это также будет работать в другом направлении, означая, что {json,yaml}-to-dhall сможет декодировать ключи записи в объединение, если это будет запрошено схемой:

$ json-to-dhall 'List { mapKey : < A | B >, mapValue : Natural }' <<< '{"A": 1, "B": 2}'
[ { mapKey = < A | B >.A, mapValue = 1 }, { mapKey = < A | B >.B, mapValue = 2 } ]
...