Pytanie jest nieco problematyczne, ponieważ opiera się na subiektywnej definicji „lepszego”.
Języki pisane zależnie, takie jak Agda , Idris i Coq, mają silniejszy system pisma niż Haskell. Oznacza to, że możesz użyć typów w tych językach, aby udowodnić, że masz o wiele więcej właściwości swojego kodu niż w Haskell. Oznacza to, że zostanie złapanych więcej niepoprawnych programów.
Jest to jednak oparte na cenie: wnioskowanie o typ i sprawdzenie, czy istnieją jakieś wartości danego typu, nie są już możliwe. Oznacza to, że dla tych języków musisz jawnie adnotować swój kod typami. Zasadniczo sprowadza się to do napisania własnych dowodów poprawności kodu.
Czy te języki są „lepsze” niż Haskell? Mogą sprawdzać zaawansowane dowody poprawności kodu, ale nie mogą automatycznie udowodnić właściwości kodu w sposób, w jaki może to zrobić Haskell.
Innym językiem badawczym, który jest „lepszy” niż Haskell, jest LiquidHaskell . Zasadniczo jest to Haskell z typami wyrafinowania przykręconymi do góry, w oparciu o specjalne komentarze.
Typy zawężania pozwalają ci na udoskonalanie typów za pomocą właściwości. Na przykład zamiast mieć Int
, możesz określić {i : Int | i > 0}
, podając typ wszystkich dodatnich liczb całkowitych. Wnioskowanie o typach jest rozstrzygalne w przypadku typów doprecyzowania, ale nie można udowodnić za pomocą nich tak wielu właściwości poprawności, jak w przypadku typów zależnych.
Istnieją inne systemy typu wyrafinowania, ale nie znam się na żadnym z nich.