C'è una differenza tra le firme dei tipi a -> b -> a e c -> a -> c?


16

Questa domanda è una domanda teorica sulle funzioni di Haskell che può accettare argomenti di qualsiasi tipo. C'è una differenza tra il modo in cui funziona con le firme dei tipi di

a -> b -> a 

e

c -> a -> c 

sono istanziati? Qualsiasi aiuto è apprezzato.


6
No, hai semplicemente cambiato il nome delle variabili di tipo . Finché non si rinomina una variabile con un'altra variabile (in modo tale che vi sia uno scontro tra nomi), non vi sono problemi.
Willem Van Onsem,

Dipende se / come le variabili del tipo sono vincolate altrove.
Bergi,

Risposte:


17

Non c'è differenza. Poiché a, be ciniziano con una minuscola , si tratta di variabili . Puoi rinominare le variabili, e questo rimane lo stesso, purché due (o più) variabili non si " scontrino ".

Tali scontri possono verificarsi se si rinomina una variabile in modo che abbia lo stesso nome di un'altra variabile o quando si rinominano due (o più) variabili con lo stesso nuovo nome. Se rinominaste la variabile, aad esempio, bnel vostro primo frammento di codice, otterremmo b -> b -> b, ma non è lo stesso, da allora imponiamo che il primo e il secondo parametro siano dello stesso tipo. Mentre nella tua firma del tipo, abbiamo la libertà di scegliere due tipi che possono essere uguali, ma che non sono necessari.


16

No. Pensa a a -> b -> acome This Type -> Another Type -> This Type. Quindi entrambi si adattano al modello dato. Tuttavia, qualcosa di simile a -> b -> cnon va bene: This Type -> That Type -> Yet Another Typeè (generalmente) diverso; tranne il caso limite quando c = a, che produce il modello che ti interessa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.