Agda es un lenguaje funcional con dependently typed. Pero que es dependently typed?
Te lo explico en este post : https://emanuelpeg.blogspot.com/2016/03/dependently-typed-languages.html
Pero si te da fiaca ir, te cuento:
Dependent type es un concepto de la programación pero también de la lógica; Dependent type es un tipo que depende de un valor. En la programación funcional se utiliza para prevenir errores, al permitir un sistema de tipo extensivo.
Dependent type añaden complejidad a un sistema de tipos. Es decir, para saber un tipo en algunos casos se deben realizar cálculos o ejecutar sentencias; esto hace bastante complejo el proceso de chequeo de tipos; y en algunos casos imposible. Pero algunos aspectos del comportamiento de un programa se pueden especificar con precisión en el tipo.
Que ventajas trae Dependently typed:
- Se pueden encontrar más errores en tiempo de compilación
- Editores que nos ayuden más
- Puede checkear que los elementos de tu programa estén bien.