Dependently Typed
Dependently typed programming languages allow types to depend on values. This means that the type of a variable can change based on the value it holds, enabling more precise type-checking at compile time. For example, a function can have a type that varies depending on the input it receives, ensuring that only valid inputs are accepted.
This feature enhances the expressiveness of the language, making it easier to encode complex properties and invariants directly in the type system. Languages like Idris and Agda are examples of dependently typed languages, which are often used in formal verification and proof assistants.