Agda
Dependent types for programs and proofs
What it does
Agda provides a dependently typed functional language in which types can depend on values, with an interactive interface assisting development of programs and proofs.
When to use it
For structures such as fixed-length vectors, examine inductive-family examples to understand the relationship between values and their associated types.