Quindi in Idris è perfettamente valido scrivere quanto segue.Differenza tra Haskell e Idris: Riflessione di Runtime/Compiletime negli universi di tipo
item : (b : Bool) -> if b then Nat else List Nat
item True = 42
item False = [1,2,3] // cf. https://www.youtube.com/watch?v=AWeT_G04a0A
Senza la firma del tipo, questo sembra un linguaggio digitato in modo dinamico. Ma, in effetti, Idris è tipicamente tipizzato. Il tipo di calcestruzzo item b
può essere determinato solo durante l'esecuzione.
Si tratta, ovviamente, di un programmatore Haskell che comunica: Il tipo di item b
nel senso Idris viene fornito durante la compilazione, è if b then Nat ...
.
Ora la mia domanda: Ho ragione a concludere che in Haskell, il confine tra il runtime e il compiletime corre esattamente tra il mondo dei valori (False, "foo", 3) e il mondo dei tipi (Bool, String , Integer) mentre in Idris, il confine tra il runtime e il compilerime attraversa universi?
Inoltre, ho ragione di assumere che anche con tipi dipendenti Haskell (utilizzando DataKinds e TypeFamilies, cfr this article) nell'esempio precedente è impossibile in Haskell, perché Haskell contrariamente a Idris non consente valori di perdite di liquido del tipo -livello?
Ottima domanda! Indirizzerò la tua attenzione su [questa lezione] (https://m.youtube.com/watch?v=ad4BVmPni7A) di @pigworker per integrare la sua risposta –
Puoi creare un argomento/tag idris-Universo e usarlo invece dell'universo, che è per il database MultiValue. – Mike
@Mike "La creazione di un nuovo tag richiede almeno 1500 reputazione ..." Suppongo che un tag appropriato sia "type-universes". –