La question est quelque peu problématique, car elle repose sur une définition subjective de «mieux».
Langages de type dépendants tels que Agda , Idris et Coq ont un système de type plus fort que Haskell. Cela signifie que vous pouvez utiliser les types de ces langages pour prouver strictement plus de propriétés de votre code qu'en Haskell. Autrement dit, il y a plus de programmes incorrects qui seront interceptés.
Cependant, cela a un prix: l'inférence de type et le test de l'existence de valeurs d'un type donné ne sont plus possibles. Cela signifie que pour ces langues, vous devez annoter explicitement votre code avec les types. Essentiellement, cela se résume à écrire vos propres preuves d'exactitude pour votre code.
Ces langues sont-elles donc "meilleures" que Haskell? Ils peuvent vérifier les preuves avancées de l'exactitude de votre code, mais ils ne peuvent pas prouver automatiquement les propriétés de votre code comme le peut Haskell.
Un autre langage de recherche qui est "meilleur" que Haskell est LiquidHaskell . Il s'agit essentiellement de Haskell avec des types de raffinement boulonnés sur le dessus, analysés à partir de commentaires spéciaux.
Les types de raffinement vous permettent d'affiner les types avec des propriétés. Par exemple, au lieu d'avoir un Int
, vous pouvez spécifier {i : Int | i > 0}
, en donnant le type de tous les entiers positifs. L'inférence de type est décidable avec les types de raffinement, mais vous ne pouvez pas prouver avec eux autant de propriétés d'exactitude que vous le pouvez avec les types dépendants.
Il existe d'autres systèmes de raffinement, mais je ne connais pas très bien l'un d'eux.