Recentemente mi sono imbattuto in una situazione in cui volevo essere in grado di comporre costruttori di tipi in una dichiarazione di istanza. Mi sarebbe piaciuto fare questo:Compilatori di tipi come funzioni
instance (SomeClass t, SomeClass t') => SomeClass (t . t') where
con (t . t')
definito tale che (t . t') a = t (t' a)
(così t
e t'
hanno tipo * -> *
Possiamo parzialmente applichiamo costruttori di tipo, come le funzioni, quindi qual è il motivo per cui non possiamo comporre.? inoltre, c'è forse una soluzione per quello che stavo cercando di realizzare forse con vincoli di uguaglianza
(so che Control.Compose esiste, ma crea semplicemente un wrapper newtype
- Vorrei un tipo sinonimo)??.
Vero, anche se '-XLiberalTypeSynonyms' consente di applicare parzialmente i sinonimi di tipo, in alcune circostanze. Non in questo caso, comunque. – leftaroundabout
Ottima risposta! Il "tipo di livello lambda" era esattamente il tipo di intuizione che stavo cercando. – Alec
L'inferenza di tipo è indecidibile con lambada di livello testo. – augustss