Используя DataKinds и TypeOperators, я могу создавать кортежи на уровне типов и списки типов на уровне типов, но не могу их вкладывать:
> :k '['(Int, Int), '(Int, Int)]
error: parse error on input ‘'’`
Я могу создать список из нескольких кортежей:
> :k ['(Int,Int),'(Int,Int)]
['(Int,Int),'(Int,Int)] :: [(*, *)]
Но это не работает только с одним кортежем:
:k ['(Int,Bool)]
<interactive>:1:2: error:
• Expected a type, but ‘'(Int, Bool)’ has kind ‘(*, *)’
Это можно сделать с помощью KindSignatures, но это очень многословно:
> :k '[('(Int,Bool) :: (*,*))]
'[('(Int,Bool) :: (*,*))] :: [(*, *)]
Есть ли менее подробный способ сделать это, или это лучший способ?