A questão é um tanto problemática, uma vez que se baseia em uma definição subjetiva de "melhor".
Idiomas de tipo dependente, como Agda , Idris e Coq, têm um sistema de tipos mais forte que o Haskell. Isso significa que você pode usar os tipos nessas linguagens para provar mais propriedades sobre o seu código do que no Haskell. Ou seja, existem mais programas incorretos que serão capturados.
No entanto, isso tem um preço: inferência de tipo e testar se existem valores de um determinado tipo, não são mais possíveis. Isso significa que, para esses idiomas, você precisa anotar explicitamente seu código com tipos. Essencialmente, isso se resume a escrever suas próprias provas de correção para o seu código.
Então, essas linguagens são "melhores" que Haskell? Eles podem verificar as provas avançadas de correção do seu código, mas não podem provar automaticamente as propriedades do seu código da maneira que Haskell pode.
Outra linguagem de pesquisa que é "melhor" que Haskell é o LiquidHaskell . Isso é basicamente Haskell, com tipos de refinamento aparafusados no topo, analisados a partir de comentários especiais.
Os tipos de refinamento permitem refinar os tipos com propriedades. Por exemplo, em vez de ter um Int
, você pode especificar {i : Int | i > 0}
, fornecendo o tipo de todos os números inteiros positivos. A inferência de tipo é decidível com tipos de refinamento, mas você não pode provar quase tantas propriedades de correção com eles quanto com tipos dependentes.
Existem outros sistemas de refinamento por aí, mas não estou muito familiarizado com nenhum deles.