Read the example in this excellent blog for explanation of Dependent Type (ie Type depends on its Value) :
Type ArrayOfOne with value ‘length’ of INT 1.
Type ArrayOfTwo with value ‘length’ of INT 2.
Type ArrayOfThree with value ‘length’ of INT 3.
Then compiler will know if correct (before run time error) :
ArrayOfThree = ArrayOfOne + ArrayOfTwo
or wrong if:
ArrayOfTwo = ArrayOfOne + ArrayOfThree