Невозможно создать список на уровне типов с одним элементом

Я чешу голову со следующим поведением. Есть ли очевидная причина, почему это так?

Prelude> :set -XDataKinds

Prelude> :k 'True
'True :: Bool

Prelude> :k ['True, 'False]
['True, 'False] :: [Bool]

Prelude> :k ['True]

<interactive>:1:2: error:
    • Expected a type, but ‘ 'True’ has kind ‘Bool’
    • In the type ‘[ 'True]’

PS: Я использую GHC 8.4.3, если это ошибка GHC, и она была исправлена ​​позже.


person Saurabh Nanda    schedule 02.07.2019    source источник


Ответы (1)


Вы должны устранить неоднозначность типов списков из типов списков на уровне типов с помощью обратной галочки:

> :k '[ 'True]

Также обратите внимание на пробел после [, необходимый для устранения неоднозначности символьных литералов уровня типа.

person András Kovács    schedule 02.07.2019
comment
Итак, :k ['True, 'False] просто случайно работает из-за некоторых смягченных правил синтаксического анализа? - person Saurabh Nanda; 02.07.2019
comment
@SaurabhNanda: да. - person András Kovács; 02.07.2019
comment
@SaurabhNanda Ну ... это не просто совпадение или что-то в этом роде. Запятая в ['True, 'False] дает понять, что это не формирователь типа списка, а фактический список. - person Daniel Wagner; 02.07.2019