Что такое зависимые типы?
меня умные люди побьют, но если сильно упрощенно, то однажды тебе придет в голову идея вида: "а что если я буду собирать типы на ходу по заранее определенным правилам - ну как инстансы типов, только аж типы"
потом ты начнешь думать о том, что это тебе даст, и из веселых побочных эффектов можно заметить, что теперь типы функций рассказывают чуть свою историю
в том же идрисе вектора (там это листы по факту вроде) типизированы над размером - вроде чет типа
Vector Size ElemType
а такие приколы позволяют утверждать, что, например, конкатенация вектора размера к и вектора размера н дает вектор размера к+н
и все это прямо в сигнатуре конкатенации
concat : Vector k a -> Vector n a -> Vector (k+n) a