Из комментариев мне вдруг пришло в голову, что вы, вероятно, на самом деле не ищете поднятые типы (т.е. виды), а скорее обычные типы.
Из комментариев (в частности: ".." . требуемый вид * ... ") кажется, что вы просто хотите создать значение типа Exp SrcSpanInfo
(и действительно, эти типы на самом деле не предназначены для использования на уровне вида).
Для этого просто примените параметры к конструктору:
> span = noInfoSpan $ mkSrcSpan noLoc noLoc
> :t span
span :: SrcSpanInfo
> list = List span []
> :t list
list :: Exp SrcSpanInfo
Оригинальный ответ
Выражение [Exp SrcSpanInfo]
не обозначает « список типов на уровне типов с одним элементом Exp SrcSpanInfo
», но скорее обозначает « единственный тип, представляющий собой список элементов типа Exp SrcSpanInfo
», аналогичный [Int]
или [String]
.
Компилятор не может отличить первое от второго, поэтому он по умолчанию использует более старую, более стандартную интерпретацию.
Для того, чтобы сделать это посмотрите список уровня типа, он должен быть заключен в одинарную кавычку, как вы это делали с 'List
.
Кроме того, Exp
- это тип, но при использовании в виде подписи он повышается до вида. Чтобы создать тип вида Exp *
, вы должны использовать один из его конструкторов . Я буду использовать конструктор List
, потому что его было проще всего создать:
> :k 'List SrcSpanInfo '[ 'List SrcSpanInfo '[] ]