tipi polimorfici sono un'estensione al sistema di tipi di Haskell, supported da UHC, consentendoQuali sono gli usi dei generi polimorfici?
data A x y = A (y x)
essere digitato (kinded?) Come a -> (a -> *) -> *
. Per cosa sono utili?
tipi polimorfici sono un'estensione al sistema di tipi di Haskell, supported da UHC, consentendoQuali sono gli usi dei generi polimorfici?
data A x y = A (y x)
essere digitato (kinded?) Come a -> (a -> *) -> *
. Per cosa sono utili?
Un possibile esempio di utilizzo può essere l'utilizzo di TypeCompose di Conal per la composizione di trasformatori monad in stile point-free.
type MyT = StateT Foo :. MaybeT :. ContT Bar
(tanto per fare un esempio, non ho idea di ciò che si sta andando a che fare con quei foos e bar ..)
Invece di:
type MyT m = StateT Foo (MaybeT (ContT Bar m))
(questo sarebbe lo stesso risultato a parte newtype
-wrappers)
Attualmente è necessario duplicare il codice del combinatore per diversi tipi e questa estensione abolisce la ripetizione e consente di utilizzare un pezzo di codice per dominarli tutti.
Sono utili per definire funzioni che operano su costruttori di dati con arbitrarietà, ovviamente!
Un esempio concreto potrebbe essere una funzione che, dato un costruttore di dati con arbitrarietà arbitraria, restituisce un nuovo costruttore di dati che avvolge il costruttore indicato in Some().
Adding Polymorphic Kinds to GHC
Lo sfondo a questa domanda sarebbe il motivation in general for a more expressive kind system.
Cioè, la ragione generale per aggiungere tipi polimorfici a Haskell è migliorare l'esperienza di programmazione di tipo. Attualmente la programmazione a livello di caratteri in Haskell procede in un livello "kind" essenzialmente non tipizzato. Un linguaggio più ricco renderà la programmazione a livello di tipo in Haskell, in generale, più facile.
Un esempio più concreto potrebbe essere quello di rimuovere la (dinamica) vincolo tipizzabile dei generici dello stile SYB (citation), oltre a migliorare il supporto generale per la programmazione generica superiore kinded ..
Può fare un esempio ? – solidsnack