Я пытаюсь узнать о зависимых типах в Идрисе, пытаясь сделать что-то далекое от моей глубины. Пожалуйста, потерпите меня, если я сделаю глупые ошибки.
Учитывая простой тип
data Letter = A | B | C | D
Я хотел бы определить тип LPair
, который содержит пару Letter
, так что могут быть соединены только «соседние» буквы. Например, B
может сочетаться с A
или C
, но не с D
или самим собой. Он зацикливается, поэтому A
и D
рассматриваются как соседи.
На практике, учитывая x : Letter
и y : Letter
, mklpair x y
будет эквивалентно mklpair y x
, но я не уверен, что это свойство может или должно быть отражено в типе.
Каков наилучший способ сделать такой тип?