Sto solo leggendo Dependent Types at Work. Nell'introduzione al parametrizzato tipologie, l'autore afferma che in questa dichiarazioneParametrized Inductive Types in Agda
data List (A : Set) : Set where
[] : List A
_::_ : A → List A → List A
il tipo di List
è Set → Set
e che A
diventa implicita argomento per entrambi i costruttori, vale a dire.
[] : {A : Set} → List A
_::_ : {A : Set} → A → List A → List A
Beh, ho provato a riscrivere un po 'diverso
data List : Set → Set where
[] : {A : Set} → List A
_::_ : {A : Set} → A → List A → List A
che purtroppo non funziona (sto cercando di imparare Agda per due giorni o giù di lì, ma da quello che ho raccolto è poiché i costruttori sono parametrizzati su Set₀
e pertanto List A
devono essere in Set₁
).
Infatti, il seguente è accettata
data List : Set₀ → Set₁ where
[] : {A : Set₀} → List A
_::_ : {A : Set₀} → A → List A → List A
tuttavia, non sono più io sono in grado di utilizzare {A : Set} → ... → List (List A)
(che è perfettamente comprensibile).
Quindi la mia domanda: qual è la differenza effettiva tra List (A : Set) : Set
e List : Set → Set
?
Grazie per il vostro tempo!
Grazie per la risposta! C'è ancora una cosa che vorrei sapere (la mia domanda potrebbe essere un po 'ambigua, temo): non riesco a definire 'List' come' Set → Set' per evitare incoerenze nel sistema di tipi, qual è l'effettiva meccanismo che rende 'Elenco (A: Set): Set'" lavoro "? Perché per me (che deriva dallo sfondo di Haskell), entrambi sembrano essere 'Elenco dati :: * -> * dove (...)', ma uno funziona e l'altro no. Grazie! – Vitus
Penso che tu abbia già indicato la ragione; per evitare i costruttori di incoerenze con Set come argomento deve essere necessario appartenere al Set₁. I tipi di dati parametrici ci consentono di scrivere tipi di dati che con gli indici dovrebbero finire con un livello "superiore" e "funziona" solo a causa delle condizioni ben definite dei tipi di dati parametrici. D'altra parte, c'è qualche polemica su come siano "sicure" le famiglie induttive, come illustra la pagina del wiki, e penso che il consenso attuale sia quello di avere un codice Agda piccolo e affidabile su cui i tipi di dati elaborati possano essere tradotti. – danr
Questo lo risolve per me, grazie. Ecco la tua meritata taglia. – Vitus