Зависимые параметры или функции уровня типа с доказательствами?

#idris #dependent-type #proof-of-correctness

Вопрос:

Я выбираю между параметризацией моего типа на Vect r Nat «и List Nat «. Сначала я подумал, что с помощью первого я могу ограничить длину вектора следующим образом

 foo : Vect m Nat -> Vect m Nat -> Vect (2 * m) Nat
 

и это делает Vect его более мощным, но потом я понял, что могу сделать то же самое, хотя и более подробно, со списками и доказательствами

 foo : (x : List Nat) -> (y : List Nat)
      -> {auto _ : length x = length y} -> List (2 * length x) Nat
 

Теперь мне интересно, является ли это в целом правдой. Отличается ли параметризация со значениями от использования функций уровня типа с доказательствами?