Недопустимый тип списка Dhall Lang - PullRequest
0 голосов
/ 09 мая 2020

Я действительно хочу использовать Dhall lang для решения проблемы, связанной с использованием Github Terraform Provider.

См .: https://github.com/etaty/example-dhall-terraform-github

Однако я никогда раньше не использовал Dhall, и у меня есть только один вариант его использования.

Я хочу отладить ошибки, которые я получаю в этом репозитории github, чтобы создать файл github.tf.

Ошибка, которую я получаю, выглядит следующим образом:

Error: Invalid type for ❰List❱

63│                        [] : Optional (List a)
64│

Я включил строку 63 ниже, где упоминается эта ошибка. Я зашел в Интернет, чтобы провести множество исследований по этому поводу, однако у меня не было никакого успеха.

in let emptyListToOptional = \(a: Type) -> \(l: List a) ->
    if (null a l) then [] : List Natural , Optional (List a)
    else [l] : List Natural, Optional (List a)

in let build = \(config: T.Config) ->
        let github_membership = map T.GithubUser T.TF/GithubMembership makeGithubMembership config.users
    in let github_team = map T.Team T.TF/GithubTeam makeGithubTeam config.teams
    in let github_team_membership = concat T.TF/GithubTeamMembership (map T.GithubUser (List T.TF/GithubTeamMembership) makeGithubTeamMembership config.users)
    in {
          github_membership = emptyListToOptional T.TF/GithubMembership github_membership
        , github_team = emptyListToOptional T.TF/GithubTeam github_team
        , github_team_membership = emptyListToOptional T.TF/GithubTeamMembership github_team_membership
    }

in {

Любая помощь будет принята с благодарностью!

1 Ответ

3 голосов
/ 09 мая 2020

Код, на который вы ссылаетесь, устарел; изменился способ указания значений Optional. Например, строки

in let emptyListToOptional = \(a: Type) -> \(l: List a) ->
    if (null a l) then [] : List Natural , Optional (List a)
    else [l] : List Natural, Optional (List a)

изначально (из репозитория) были

in let emptyListToOptional = \(a: Type) -> \(l: List a) ->
    if (null a l) then [] : Optional (List a)
    else [l]: Optional (List a)

, которые теперь должны читаться как

in let emptyListToOptional = \(a: Type) -> \(l: List a) ->
    if (null a l) then <b>None (List a)</b>
    else <b>Some l</b>
...