Dependent types may help reduce bugs by enabling the programmer to assign types that further restrain the set of possible implementations.
From Matt Parsons tweet:
Function: Value -> Value
Type Class: Type -> Value
Type-level Programming: Type -> Type
Dependent Types: Value -> Type