La domanda è alquanto problematica, poiché si basa su una definizione soggettiva di "migliore".
Lingue tipicamente dipendenti come Agda , Idris e Coq hanno un sistema di tipi più forte di Haskell. Ciò significa che è possibile utilizzare i tipi in queste lingue per dimostrare più proprietà del codice rispetto a Haskell. Cioè, ci saranno più programmi errati che verranno catturati.
Tuttavia, questo ha un prezzo: l'inferenza del tipo e la verifica dell'esistenza di valori di un determinato tipo non sono più possibili. Ciò significa che per queste lingue, è necessario annotare esplicitamente il codice con i tipi. Fondamentalmente questo si riduce a scrivere le tue prove di correttezza per il tuo codice.
Quindi queste lingue sono "migliori" di Haskell? Possono verificare le prove avanzate di correttezza per il tuo codice, ma non possono provare automaticamente le proprietà del tuo codice come può fare Haskell.
Un altro linguaggio di ricerca "migliore" di Haskell è LiquidHaskell . Questo è fondamentalmente Haskell con tipi di raffinamento imbullonati in alto, analizzati da commenti speciali.
I tipi di perfezionamento ti consentono di perfezionare i tipi con proprietà. Ad esempio, invece di avere unInt
, puoi specificare {i : Int | i > 0}
, fornendo il tipo di tutti i numeri interi positivi. L'inferenza del tipo è decidibile con i tipi di perfezionamento, ma non è possibile dimostrare con loro quasi tutte le proprietà di correttezza che è possibile con i tipi dipendenti.
Esistono altri sistemi di perfezionamento, ma non ho molta familiarità con nessuno di essi.